CF949 简要题解
A Zebras
0一定比1多,考虑一列列的填,如果遇到000就cnt++cnt ++cnt++,在cntcntcnt这个位置放一个000,否则在cntcntcnt这个位置放一个111,然后cnt−−cnt --cnt−−
code:
#include<bits/stdc++.h>
#define N 200050
using namespace std;
int ans, n;
char st[N];
vector<int> a[N];
int main() {scanf("%s", st + 1);n = strlen(st + 1);int gs = 0;for(int i = 1; i <= n; i ++) {if(st[i] == '0') a[++ gs].push_back(i);else {if(!gs) {printf("-1");return 0;}a[gs --].push_back(i);}ans = max(ans, gs);}if(gs < ans) {printf("-1");return 0;}printf("%d\n", ans);for(int i = 1; i <= ans; i ++) {printf("%d ", (int)a[i].size());for(int x : a[i]) printf("%d ", x); printf("\n");}return 0;
}
B A Leapfrog in the Array
反过来推原来的位置
猜一手每个数每次跳跃的距离都/2/2/2
手玩一下不难得出
code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
int m, t;
void solve() {scanf("%lld%d", &n, &m);while(m --) {ll x;scanf("%lld", &x);ll y = n - x + (x / 2);while(x % 2 == 0) {x += y;y /= 2;}printf("%lld\n", (x + 1) / 2);}
}
int main() {solve();return 0;
}
C Data Center Maintenance
难点在看懂题
如果uuu公司推迟会影响vvv公司,那么连一条有向边,然后跑强连通分量,看看出度为000的最小的强连通分量大小即可
code:
#include<bits/stdc++.h>
#define N 200050
using namespace std;
int dfn[N], low[N], sta[N], insta[N], top, tot, bel[N];
int in[N], n, m, h, out[N], siz[N], a[N], sz;
vector<int> g[N];
void tar(int u) {dfn[u] = low[u] = ++ tot;insta[u] = 1, sta[++ top] = u;for(int v : g[u]) {if(!dfn[v]) tar(v), low[u] = min(low[u], low[v]);else if(insta[v]) low[u] = min(low[u], dfn[v]);}if(low[u] == dfn[u]) {++ sz; while(sta[top] != u) {insta[u] = 0; bel[sta[top]] = sz;top --; siz[sz] ++;}insta[u] = 0; bel[sta[top]] = sz;top --; siz[sz] ++;}
}
int main() {scanf("%d%d%d", &n, &m, &h);for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);for(int i = 1; i <= m; i ++) {int u, v;scanf("%d%d", &u, &v);if((a[u] + 1) % h == a[v] % h) g[u].push_back(v);if((a[v] + 1) % h == a[u] % h) g[v].push_back(u); }for(int i = 1; i <= n; i ++) if(!dfn[i]) tar(i);for(int u = 1; u <= n; u ++) {for(int v : g[u]) if(bel[u] != bel[v]) {in[bel[v]] ++;out[bel[u]] ++;}}int ans = n;for(int i = 1; i <= sz; i ++) if(!out[i]) ans = min(ans, siz[i]);printf("%d\n", ans);for(int i = 1; i <= sz; i ++) if(!out[i] && siz[i] == ans) {for(int u = 1; u <= n; u ++) if(bel[u] == i) printf("%d ", u);break;} return 0;
}
D Curfew
贪心去做即可
code:
#include<bits/stdc++.h>
#define N 200050
#define ll long long
using namespace std;
ll d, b, a[N], n;
int main() {scanf("%lld%lld%lld", &n, &d, &b);for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]), a[i] += a[i - 1];ll mid = (n + 1) / 2, s1 = 0, s2 = 0;for(int i = 1; i <= mid; i ++) {ll o = a[min(n, i + i * d)] - s1 * b;if(o >= b) s1 ++;}for(int i = n; i > mid; i --) {ll o = (a[n] - a[max(0ll, i - (n - i + 1) * d) - 1]) - s2 * b;if(o >= b) s2 ++;}// printf("%lld %lld\n", s1, s2);printf("%lld", max(mid - s1, n - mid - s2));return 0;
}
E Binary Cards
互为相反数的同时出现一定不优
考虑分治,从低位到高位考虑,如果当前位有111,那么必须选一个−2i-2^i−2i或2i2^i2i
按照选这两种的其中一种分治下去即可
每层至少会减少一半的数,所以时间复杂度是正确的
code;
#include<bits/stdc++.h>
#define N 200050
using namespace std;
void uniq(vector<int> &a) {sort(a.begin(), a.end());vector<int> b;a.push_back(-114514);for(int i = 0; i < a.size() - 1; i ++) if(a[i] != a[i + 1]) b.push_back(a[i]);a.swap(b);
}
vector<int> solve(int dep, vector<int> & a) {if(dep > 20) return vector<int>(0);uniq(a);// printf("** %d\n", dep);// for(int x : a) printf("%d ", x); printf("\n");int f = 0;for(int x : a) f |= (x & 1);if(!f) {for(int &x : a) x >>= 1;// printf("^");return solve(dep + 1, a);}vector<int> s1, s2;for(int x : a) if(x & 1) s1.push_back((x - 1) >> 1); else s1.push_back(x >> 1);for(int x : a) if(x & 1) s2.push_back((x + 1) >> 1); else s2.push_back(x >> 1);vector<int> ans1 = solve(dep + 1, s1), ans2 = solve(dep + 1, s2);ans1.push_back(1 << dep), ans2.push_back(- (1 << dep));if((int)ans1.size() < (int)ans2.size()) return ans1;return ans2;
}
int n;
vector<int> a;
int main() {scanf("%d", &n);for(int i = 1; i <= n; i ++) {int x;scanf("%d", &x);a.push_back(x);}vector<int> ans = solve(0, a);printf("%d\n", (int)ans.size());for(int x : ans) printf("%d ", x);return 0;
}
CF949 简要题解相关推荐
- Noip 2014酱油记+简要题解
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
- c语言1106回文数,Codeforces 1106 简要题解
A题 传送门 读错题还能过样例我给自己点个赞. 题意简述:给一个010101网格SSS,问满足Si,j=Si+1,j+1=Si+1,j−1=Si−1,j−1=Si−1,j+1S_{i,j}=S_{i+ ...
- 湖南省第十届蓝狐网络杯大学生计算机程序设计竞赛,2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解...
2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...
- 杂题记录及简要题解(一)
一些前几天做过的还不错的但是不是太想专门花一整篇博客的篇幅去写的题就简要地记录在这里. 说是简要题解,其实写得还是挺详细的.之后的杂题记录可能就会写得简略一点. CF1060E Sergey and ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- 【NOI2019十二省联合省选】部分题简要题解
Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大. 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在\ ...
- Codeforces 1110 简要题解
文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 众所周知ldxoildxoildxoi这种菜鸡选手是不会写HHH题的,因此该篇博客只有AAA题至GGG题的题解,实在抱歉. A题 传送门 题 ...
- 【HNOI2019】部分题简要题解
题意懒得写了 LOJ Day 1 T1 鱼 个人做法比较猎奇,如果有哪位大佬会证明能分享一下的话感激不尽. 题解:枚举鱼尾和鱼身的交点D,将所有其他点按照到D的距离排序,距离相同的分一组. 感性的理解 ...
- BJOI2018 简要题解
二进制 序列上线段树维护DDP好题. 题解可以看这篇 代码: #include<bits/stdc++.h> #define ri register int using namespace ...
- ARC083简要题解
开幕雷击系列. 最后一题真的神仙,不会. C题: 发觉这东西好像可以背包. 然后背出来枚举一枚举就行. 貌似直接枚举也行? 注意判答案是时候有个式子 S u g a r 1 T o t 1 < ...
最新文章
- 哪些人适合学软件测试呢
- 从零学React Native之12 组件的生命周期
- 解决Maven报Plugin execution not covered by lifecycle configuration (转载)
- djc加密数字货币_中国银行原副行长: quot;网络加密币quot;难以成为货币,央行数字货币只能是法定货币的数字化...
- 矩陣 线性递归 斐波那契實現
- Redis之字典(hashtable)
- 关于研究生申请的心态:submitted之后就等一下结果,不要着急
- java xml 实体类_XML和JAVA实体类的相互转化(微信例子)
- 广东金融学院计算机期末考试,关于2018-2019学年第二学期录入期末成绩的通知
- pyqt5子窗口跳出主窗口_弹出式窗口与 可用性,转换和跳出率
- 31-- 二叉搜索树的范围和
- 张文宏:知道很多网友批评我,但粥还是不能喝
- lz0-007 读书笔记17
- Windows8(2012) 如何改变登录界面上难看的头像,任意换!
- 又看了半天的pdf格式的js方面的书,感觉受益匪浅啊,只会一点操作的我,要学好理论...
- html写自动关机的代码,让电脑自动关机代码是什么
- PN512使用的一些小技巧
- ISL22326WFR16Z-TK 2 电路 I²C 接口 双数字电位器
- Windows 10原创知识题(第三版)
- Deeping Learning学习与感悟——《深度学习工程师》_1