AtCoder ABC-161 A - ABC Swap
グラブルで古戦場が始まってしまったので今日は1問だけ...(しかもA問題)
方針
変数の入れ替えですね、tmp変数用意して入れ替えます。
(ネットでswap関数コピーしてくるのが手っ取り早い)
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define lli long ling int; int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); // a, b swap int tmp = 0; tmp = a; a = b; b = tmp; // a, c swap tmp = a; a = c; c = tmp; cout << a << " " << b << " " << c <<endl; return 0; }
AtCoder ABC-162 C - Sum of gcd of Tuples (Easy) /
方針
3つの整数に対してユークリッドの互除法を使いました。
3重ループは時間がかかるので非推奨ですが...
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define lli long ling int; int gcd(int a, int b) { int r; r = a % b; while(r!=0) { a = b; b = r; r = a % b; } return b; } int main() { long long int K, sum = 0; scanf("%lld", &K); for (int i = 1; i <= K; i++) { for (int j = 1; j <= K; j++) { for (int k = 1; k <= K; k++) { // i,j,k gcd int a, b, c, d, tmp; a = i; b = j; c = k; if (a < b) { tmp = a; a = b; b = tmp; } d = gcd(a, b); if (c < d) { tmp = c; c = d; d = tmp; } int res = gcd(c, d); sum += res; } } } printf("%lld\n", sum); return 0; }
AtCoder ABC-162 B - FizzBuzz Sum
方針
FizzBuzz!!
FizzとBuzz以外を足していきました。オーバーフロー対処にはlong long int使いました笑
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define lli long ling int; int main() { long long int N, sum = 0; scanf("%lld", &N); for (long long int i = 1; i <= N; i++) { if (i % 3 == 0) continue; if (i % 5 == 0) continue; sum += i; } printf("%lld\n", sum); return 0; }
AtCoder ABC-162 A - Lucky 7
方針
商と余りに着目。余りが7だったらYes。
入力の仕様が3桁だったので同じ処理を2回書きました...
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define lli long ling int; int main() { int N; scanf("%d", &N); int a, b; a = N / 10; b = N % 10; if (b == 7) { printf("Yes\n"); return 0; } b = a % 10; a /= 10; if (b == 7) { printf("Yes\n"); return 0; } b = a % 10; if (b == 7) { printf("Yes\n"); return 0; } printf("No\n"); return 0; }
AtCoder ABC-151 C問題Welcome to AtCoder
方針
ACに着目して条件分岐。ACになる過程でWAをカウントアップしていきました。
そして対象の問題がACになってたらcontinue。
ぼくはACとWAに関するテーブル(初期値-1)を作成してACになったらFLAG[p[i]-1][0]=1にして解きました。
#include <stdio.h> #include <bits/stdc++.h> #include <iostream> using namespace std; int main() { int n,m, ac=0, wa=0; scanf("%d %d", &n, &m); int p[m], flag[n][2]; char s[m][3]; for(int i=0;i<m;i++) { scanf("%d %s", &p[i], s[i]); } for(int i=0;i<n;i++) { flag[i][0] = 0; flag[i][1] = 0; } for(int i=0;i<m;i++) { if(flag[p[i]-1][0]==1) { continue; } if(strcmp(s[i], "WA")==0) { flag[p[i]-1][1]+=1; } if(strcmp(s[i], "AC")==0) { flag[p[i]-1][0]=1; wa+=flag[p[i]-1][1]; } } for(int i=0;i<n;i++) { //printf("%d %d\n", flag[i][0], flag[i][1]); if(flag[i][0]>=1){ ac+=1; } } printf("%d %d\n", ac, wa); return 0; }
AtCoder ABC-151 B問題Achieve the Goal
方針
あと何点とればいいのか、なので逆算して求めることができます。
X = M*N-(a[0]+ … +a[i-1])みたいな感じ...
あとはXが満点を超えてないかとか0点でもいいのかについて条件分岐してあげるだけ。
#include <stdio.h> #include <bits/stdc++.h> #include <iostream> using namespace std; int main() { int m,k,n; scanf("%d %d %d", &n, &k, &m); int tmp[n-1]; for(int i=0;i<n-1; i++) scanf("%d", &tmp[i]); int t_s = 0, ans; for(int i=0; i<n-1; i++) t_s += tmp[i]; ans = m*n-t_s; if (ans > k){ cout << "-1" << endl; return 0; } if (ans <= 0){ cout << "0" << endl; return 0; } cout << ans << endl; return 0; }