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. 第三章 HTTP报文中的HTTP信息

    第三章 HTTP报文中的HTTP信息 HTTP通信过程:客户端—>服务端,服务端—>客户端. 1.HTTP报文 使用HTTP协议交互的信息被称为HTTP报文,包括请求报文和响应报文. [请 ...

  2. Linux 的 Crond(二)

    最近由于工作中用到了crond,之前对crond不是很了解,只知道咋用,但是这次需要考虑好多情况,所以又深入了解了一下crond,下面就以下几个问题来谈谈crond. crond 中指定的job,如果 ...

  3. python的__future__模块

    一.概述 Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了.从Python 2.7到P ...

  4. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  5. IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

    5  switch-case条件语句 Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择.尽管一系列嵌套if语句可以执行多路测试,然而 ...

  6. Jenkins的安装后配置

    配置Jenkins server 1.安装插件:选择自定义插件安装 Locale plugin Localization: Chinese (Simplified) Git Subversion HT ...

  7. Kubernetes V1.15 二进制部署集群

    1. 架构篇 1.1 kubernetes 架构说明              1.2 Flannel网络架构图 1.3 Kubernetes工作流程             2. 组件介绍 2.1 ...

  8. Alpine Linux 安装 lxml Pillow 失败

    lixm 需要编译安装,因此需要先安装gcc g++ RUN apk add --update --no-cache g++ gcc libxslt-dev python3-dev openssl-d ...

  9. 数据库——SQL SERVER Transact-SQL 程序设计

    什么是Transact-SQL? 标准SQL不支持过程化控制, 不能完成复杂的功能.T-SQL是过程化SQL语言,   是SQL的扩展 增加了过程化语句 (变量,赋值,分支,循环...)是数据库服务器 ...

  10. 转 googlenet论文解读

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014061630/article/det ...