QBXT模拟赛1

总结

期望得分:\(100 + 80 + 10 = 190\)

实际得分:\(90 + 80 + 10 = 180\)

这是在清北的第一场考试,也是在清北考的最高的一次了吧。。本来以为能拿\(190\)的,没想到强者太多,\(AK\)的一群,\(200\)分大众分。。我好菜

思路&&代码

T1

\(T1\)是个简单题,却因为\(1-1=0\)这个点忘记去除前导零而失去了\(10\)分,以后要多对拍,多注意细节

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int N = 1e5 + 11; inline int read() {
char c = getchar();
int x = 0, f = 1;
for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
return x * f;
} char s[N];
string a;
int len, now, whe, pos; int main() {
scanf("%s", s + 1);
len = strlen(s + 1), now = s[1] - '0', whe = 1, pos = 1;
for(int i = 2, x; i <= len; i++) {
x = s[i] - '0';
if(x > now) {
now = x;
whe = i;
pos = i;
}
else if(x == now) pos = i;
if(x < now) break;
}
if(whe == len || pos == len) return cout << (s + 1) << '\n', 0;
for(int i = 1; i < whe; i++) a += s[i];
if(s[whe] - 1 != '0') a += s[whe] - 1;
for(int i = whe + 1; i <= len; i++) a += '9';
cout << a;
return 0;
}

T2

看式子不懂,之后手算一下发现就是个逆序对,进而发现可以转化为求哪些区间包含这对逆序对,然后这对逆序对的值乘以区间个数,式子如下

\[\sum_j a_j * (n - j + 1) *\sum_{a_i > a_j, i < j} a_i * i
\]

后面的可以用数据结构维护,发现模数是\(1e12+7\),两个\(10^12\)的数相乘会爆\(long\ long\),所以要用快速乘

然后就做完了

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lowbit(x) (x & -x)
#define int long long
using namespace std; const int N = 5e5 + 11;
const int mod = 1e12 + 7; inline int read() {
char c = getchar();
int x = 0, f = 1;
for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
return x * f;
} int n;
int a[N], ans = 0;
int b[N], p[N], f[N]; inline int mul(int a, int b, int res = 0) {
while(b) {
if(b & 1) ans = (ans + a) % mod;
a = a + a % mod; b >>= 1;
}
return res;
} inline int query(int x) {
int ans = 0;
for(int i = x; i; i -= lowbit(i)) ans = (ans + p[i]) % mod;
return ans;
} const int MAX = 1e5; inline void add(int x, int val) {
for(int i = x; i <= MAX; i += lowbit(i)) p[i] = (p[i] + val) % mod;
return;
} signed main() {
n = read();
for(int i = 1; i <= n; i++) b[i] = a[i] = read();
sort(b + 1, b + 1 + n);
for(int i = 1; i <= n; i++) f[i] = lower_bound(b + 1, b + 1 + n, a[i]) - b;
for(int i = 1; i <= n; i++) {
int now = query(n) - query(f[i]);
now = (now % mod + mod) % mod;
ans = ans + mul(now * (n - i + 1), a[i]);
ans = (ans % mod + mod) % mod;
add(f[i], a[i] * i);
}
ans = (ans % mod + mod) % mod;
cout << ans << '\n';
return 0;
}

T3

直接用线段树扫描线就\(over\)了

还有一种神奇做法。。

#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
#define PII pair<int, int>
#define mk(x, y) make_pair(x, y)
using namespace std; const int N = 5e4 + 11;
const int M = 1e6 + 11;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f; inline int read() {
char c = getchar();
int x = 0, f = 1;
for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
return x * f;
} int n, m, a[N], b[N], c[N], d[N];
int mina, minb, maxc, maxd; map<pair<int, int>, int> mp; int main() {
int T = read();
while(T--) {
n = read();
mina = minb = INF;
maxc = maxd = -INF;
mp.clear();
for(int i = 1; i <= n; i++) {
a[i] = read(), b[i] = read(), c[i] = read(), d[i] = read();
mina = min(mina, a[i]);
minb = min(minb, b[i]);
maxc = max(maxc, c[i]);
maxd = max(maxd, d[i]);
mp[mk(a[i], b[i])]++;
mp[mk(a[i], d[i])]++;
mp[mk(c[i], b[i])]++;
mp[mk(c[i], d[i])]++;
}
int cnt = 0;
if(mp[mk(mina, minb)] == 1) cnt++;
if(mp[mk(mina, maxd)] == 1) cnt++;
if(mp[mk(maxc, minb)] == 1) cnt++;
if(mp[mk(maxc, maxd)] == 1) cnt++;
if(cnt != 4) {
puts("Guguwansui");
continue;
}
cnt = 0;
for(int i = 1; i <= n; i++) {
if(mp[mk(a[i], b[i])] == 1) cnt++;
if(mp[mk(a[i], d[i])] == 1) cnt++;
if(mp[mk(c[i], b[i])] == 1) cnt++;
if(mp[mk(c[i], d[i])] == 1) cnt++;
}
if(cnt == 4) puts("Perfect");
else puts("Guguwansui");
}
return 0;
}
//这题太神了我不会。

QBXT模拟赛1的更多相关文章

  1. QBXT模拟赛2

    总结 期望得分:\(100 + 40 + 0 = 140\) 实际得分:\(0 + 0 + 0 = 0\) 鬼知道为什么我代码没有交上..自测\(10 + 50 + 0\)--这是心态爆炸的一场考试 ...

  2. 4.28 QBXT模拟赛

    NOIP2016提高组模拟赛 ——By wangyurzee7 中文题目名称 迷妹 膜拜 换数游戏 英文题目与子目录名 fans mod game 可执行文件名 fans mod game 输入文件名 ...

  3. 2017.10.3 QBXT 模拟赛

    题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...

  4. 2017.10.7 QBXT 模拟赛

    题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...

  5. 2017.10.6 QBXT 模拟赛

    题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...

  6. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  7. 2017.10.4 QBXT 模拟赛

    题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...

  8. 2017.10.2 QBXT 模拟赛

    题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...

  9. 2017.10.1 QBXT 模拟赛

    题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...

随机推荐

  1. 【AtCoder】AtCoder Grand Contest 040 解题报告

    点此进入比赛 \(A\):><(点此看题面) 大致题意: 给你一个长度为\(n-1\).由\(<\)和\(>\)组成的的字符串,第\(i\)位的字符表示第\(i\)个数和第\( ...

  2. 推荐书单(网课)-人生/编程/Python/机器学习-130本

    目录 总计(130本) 一.在读 二.将读 三.已读 非专业书单(77本) 四.已读 专业书单(53本) 五.已看网课(8个) 六.在看网课 一个人如果抱着义务的意识去读书,便不了解读书的艺术.--林 ...

  3. PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串

    需求 如果需要将可能含有中文的字符串进行拆分成数组,我们下面以 utf-8 编码为例. 解决方案一 我习惯的方法可能是: mb_internal_encoding("UTF-8") ...

  4. .NET MVC5简介(三)Result

    Ajax请求数据响应格式,一个醒目组必须是同意的,前端才知道怎么应付,还有很多其他情况,比如异常了,有ExceptionFilter,按照固定格式返回,比如没有权限,Authorization,按照固 ...

  5. Python笔记:设计模式之命令模式

    命令模式,正如模式的名字一样,该模式中的不同操作都可以当做不同的命令来执行,可以使用队列来执行一系列的命令,也可以单独执行某个命令.该模式重点是将不同的操作封装为不同的命令对象,将操作的调用者与执行者 ...

  6. linux tmux用法

    1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t  ...

  7. JavaEE之Hibernate(开放源代码的对象关系映射框架)

    Hibernate(开放源代码的对象关系映射框架) 1.简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全 ...

  8. 双十一DIY装机记

    一.装机背景   最近发现古董笔记本太卡了,用了近6年,尽管自己不打游戏,但是业余时间写写代码,同时开两个编辑器,打开个大一点的软件都卡的不行,据说更换固态硬盘可以提高速度,于是乎,京东买了一个500 ...

  9. 解决iOS地图持续定位耗电问题

    地图位置刷新的代理didUpdateLocations会持续调用,手机非常耗电 但是在实际开发中,有一些APP确实需要用到持续定位的功能,比如:运动类, 导航类, 天气类等等 如何进行持续定位呢?保证 ...

  10. python async

    理解 python 的 async:1. 协程后面的技术也是 IO 多路复用, Nginx 和 nodejs 都充分利用了这种机制. 2. Flask 线程中为什么不能直接使用标准库 asyncio ...