1. 程式人生 > >Codeforces Round #676 (Div. 2) A - D個人題解(E題待補)

Codeforces Round #676 (Div. 2) A - D個人題解(E題待補)

### 1421A. XORwice 題目連結:[Click Here](https://codeforces.com/contest/1421/problem/A) ```cpp // Author : RioTian // Time : 20/10/18 #include #define ms(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; ll n, m, _; void solve() { cin >> n >> m; cout << (n ^ m) << endl; } int main() { // freopen("in.txt", "r", stdin); ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); cin >> _; while (_--) solve(); } ``` ### 1421B. Putting Bricks in the Wall 題目連結:[Click Here](https://codeforces.com/contest/1421/problem/B) 如果選擇S的鄰居為1,我們就可以F使為0的鄰居,就沒有辦法從S到F,但這在最壞的情況下需要4個開關,這是不夠的。 幸運的是,為了減少到2個開關,只需反過來考慮,使相鄰S的正方形變為0,使相鄰的正方形變為F 1。必須存在最多具有兩個開關的兩個正方形的解,並且您不會從S到F,因為被迫選擇1(或0),並且無法通過與F相反的鄰居。 ```cpp // Author : RioTian // Time : 20/10/18 #include
#define ms(a, b) memset(a, b, sizeof a) using namespace std; typedef long long ll; ll n, m, _; char x[210][210]; void solve() { cin >> n; for (int i = 1; i <= n; i++) cin >> x[i] + 1; int a = x[1][2] - '0', b = x[2][1] - '0', c = x[n][n - 1] - '0', d = x[n - 1][n] - '0'; if (a == b && c == d && a != c) cout << 0 << endl; else if (a != b && c != d) cout << 2 << endl << 1 << " " << 2 << endl << (a == c ? n - 1 : n) << " " << (a == c ? n : n - 1) << endl; else if (a != b) cout << 1 << endl << (a == c ? 1 : 2) << ' ' << (a == c ? 2 : 1) << endl; else if (c != d) cout << 1 << endl << (a == c ? n : n - 1) << ' ' << (a == c ? n - 1 : n) << endl; else cout << 2 << endl << 1 << ' ' << 2 << endl << 2 << " " << 1 << endl; } int main() { // freopen("in.txt", "r", stdin); ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); cin >
> _; while (_--) solve(); } ``` ```python #python import sys input = sys.stdin.readline I = lambda : list(map(int,input().split())) t,=I() for _ in range(t): n,=I() l=[input().strip() for i in range(n)] an=[] le=[0,0,1,1,1];p=[1,1,0,0,0] rq=[l[0][1],l[1][0],l[1][1],l[2][0],l[0][2]] pos=[[1,2],[2,1],[2,2],[3,1],[1,3]] ct=cp=0;a1=[] for i in range(5): if le[i]!=int(rq[i]): ct+=1 a1.append(pos[i]) for i in range(5): if p[i]!=int(rq[i]): cp+=1 an.append(pos[i]) if ct<=cp: an=a1 print(len(an)) for i in an: print(*i) ``` ### 1421C. Palindromifier 題目連結:[Click Here](https://codeforces.com/contest/1421/problem/C) 這道題寫的挺懵的,一開始都沒理解題意 被dalao提醒以後然後發現是構造題,根據題目說的兩種方案: 對於任何字串都可以先 $L ,i = 2 $,然後$R,i = 2 $ + $R, i = 7$。一定能構造需所需的字串 ```cpp // Author : RioTian // Time : 20/10/18 #include
using namespace std; typedef long long ll; string s; int main() { // freopen("in.txt","r",stdin); ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); cin >> s; cout << "3\nL 2\nR 2\n"; cout << "R " << 2 * s.size() - 1 << endl; } ``` ```python print('3\nL 2\nR 2\nR',len(input())*2-1) ``` ### 1421D. Hexagons (補) 題目連結:[Click Here](https://codeforces.com/contest/1421/problem/D) ```cpp // Author : RioTian // Time : 20/10/18 #include using namespace std; #define ll long long int inf = 1e9 + 7; ll x, y, c1, c2, c3, c4, c5, c6; ll check(ll ad) { ll ans = 0; if (ad > 0) ans += ad * c1; else ans += -ad * c4; if (x - ad > 0) ans += (x - ad) * c6; else ans += (ad - x) * c3; if (y - ad > 0) ans += (y - ad) * c2; else ans += (ad - y) * c5; return ans; } void solve() { cin >> x >> y >> c1 >> c2 >> c3 >> c4 >> c5 >> c6; ll l = -inf, r = inf; while (l < r) { ll mid = l + r >> 1; if (check(mid) < check(mid + 1)) r = mid; else l = mid + 1; } cout << min({check(l), check(l + 1), check(l - 1)}) << '\n'; } int main() { int t; cin >> t; while (t--) solve(); } ``` ### 1421E. Swedish Heroes (補) 題目連結:[Click Here](https://codeforces.com/contest/1421/pr