Codeforces Round #738 (Div. 2) A--D1
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #738 (Div. 2) A--D1
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原題戳這里Codeforces Round #738 (Div. 2)
A. Mocha and Math
題目大意
-
通過(guò)對(duì)某個(gè)區(qū)間內(nèi)的數(shù)進(jìn)行題目所給操作
-
希望最小化序列中的最大值
思路
-
萬(wàn)惡的位運(yùn)算竟然出現(xiàn)在第一題說(shuō)明只要轉(zhuǎn)個(gè)小彎就能看破
-
一個(gè)數(shù)和其他數(shù)做位與運(yùn)算(以下自己結(jié)合運(yùn)算特點(diǎn)想一想就能想通)
- 要么不變(與自己相同的數(shù))
- 要么變小(與自己不同的數(shù))
-
所以和別的元素相與時(shí)不虧的,所以全部與一遍就好啦
-
因?yàn)椴僮鞔螖?shù)不限,所以一定能實(shí)現(xiàn)上述
代碼
#include<bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int n, m, t; int a[N];int main() {cin >> t;while(t --){cin >> n;for(int i = 0; i < n; i ++) cin >> a[i];int ans = a[0];for(int i = 1; i < n;i ++) ans &= a[i];cout << ans << endl;}return 0; }B. Mocha and Red and Blue
題目大意
- 序列中出現(xiàn)一次連續(xù)的兩個(gè)相同字符就有一個(gè)不完美度
- 求怎樣涂色才能使不完美度最小
思路
- 容易想到兩種字符盡量交錯(cuò)為最優(yōu)解
- 那么問(wèn)題來(lái)了,怎樣能不漏的填完呢
- 正著填一遍再倒著填一遍就可以做到不漏自己也覺得很神奇
- 全是問(wèn)號(hào)的情況下交錯(cuò)輸出即可
代碼
#include<bits/stdc++.h>using namespace std;int n, m, t; string s;int main() {cin >> t;while(t --){cin >> n;s.clear();cin >> s;int flg = 1;for(int i = 1; i < n; i ++){if(s[i] == '?'){if(s[i - 1] == 'R') s[i] = 'B';if(s[i - 1] == 'B') s[i] = 'R';}}for(int i = n - 2; i >= 0; i --){if(s[i] == '?'){if(s[i +1] == 'R') s[i] = 'B';if(s[i + 1] == 'B') s[i] = 'R';}}if(s[0] == '?'){for(int i = 0; i < n; i ++){if(i & 1) cout << 'B';else cout << 'R';}puts("");continue;}cout << s << "\n";}return 0; }C. Mocha and HikingC. Mocha and Hiking
題目大意
-
n+1個(gè)村子由2n-1條道路相連
-
道路有兩種
- n-1條道路是從 i村到 i + 1村,所有1≤ i ≤ n-1
- a[i] 為0表示可以從i村到 i+1村,為1表示i + 1村可以到i村
-
問(wèn)是否錯(cuò)在一條路徑走完所有村子
思路
- 很容易發(fā)現(xiàn)存在連續(xù)的01序列就滿足條件
- 但是以下兩種情況需要注意某人因?yàn)檫@個(gè)wa了好幾發(fā)
- 11110類也可以,按順序訪問(wèn)村子的情況
- 11111類也可以,先訪問(wèn)n+1村再依次訪問(wèn)其他
代碼
#include<bits/stdc++.h>using namespace std;const int N = 1e4 + 10;int n, m, t; int a[N];int main() {cin >> t;while(t --){cin >> n;for(int i = 1; i <= n; i ++) cin >> a[i];a[n + 1] = 1;int flg = 0, res = 1;for(int i = 1; i <= n; i ++){if(a[i] == 1);if(a[i] == 0 && a[i + 1 ]== 1){res = i;flg = 1;break;}}if(flg){for(int i = 1; i <= n; i ++){if(i == res) cout << i << " " << n + 1 << " ";else cout << i << " ";}puts("");}else if(!flg && a[1] == 1){cout << n + 1 << " ";for(int i = 1; i <= n; i ++) cout << i << " ";puts(" ");flg = 1;}else if(!flg) puts("-1");}return 0; }D1. Mocha and Diana (Easy Version)
題目大意
- 兩人分別有n個(gè)點(diǎn),最初這些點(diǎn)中有些被連成聯(lián)通塊
- 連詞邊的操作在兩波分同時(shí)進(jìn)行
- 已經(jīng)在同一連通塊中兩點(diǎn)不能連
- 問(wèn)最多可以連幾條
思路
- 與連通塊相關(guān)指向并查集
- 維護(hù)兩個(gè)并查集,記錄可連邊即可
代碼
#include<bits/stdc++.h>using namespace std;const int N = 1010;int n, m1, m2; int p[N], q[N];struct node {int x, y; }pi[N];int find1(int x) {if(p[x] != x) p[x] = find1(p[x]);return p[x]; }int find2(int x) {if(q[x] != x) q[x] = find2(q[x]);return q[x]; }int main() {cin >> n >> m1 >> m2;for(int i = 1; i <= n; i ++) p[i] = i;for(int i = 1; i <= n; i ++) q[i] = i;while(m1 --){int u, v;cin >> u >> v;p[find1(u)] = find1(v);}while(m2 --){int u, v;cin >> u >> v;q[find2(u)] = find2(v);}int cnt = 0;for(int i = 1; i <= n; i ++)for(int j = 1; j <= n; j ++){int a1, a2, a3, a4;if(i != j){a1 = find1(i), a2 = find1(j);a3 = find2(i), a4 = find2(j);if(a1 != a2 && a3 != a4){pi[cnt ++] = {i, j};p[a1] = a2;q[a3] = a4;}}}cout << cnt << "\n";for(int i = 0; i < cnt ; i ++){cout << pi[i].x << " " << pi[i].y << "\n";}return 0; }總結(jié) 耐心,細(xì)心,塌心,靜心
總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #738 (Div. 2) A--D1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 刚找工作闲谈
- 下一篇: 定时/计数器应用3——脉冲宽度的测量