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; }
AtCoder ABC-151 A問題Next Alphabet
方針
アルファベットを順番に配列に格納。
入力した文字に対して走査し、i+1番目を出力します。
#include <stdio.h> #include <bits/stdc++.h> #include <iostream> using namespace std; int main() { char a[27]="abcdefghijklmnopqrstuvwxyz"; //char s[1]; char s; scanf("%c", &s); for(int i=0; i<27; i++){ if(a[i]==s){ printf("%c\n", a[i+1]); return 0; } } }
AtCoder ABC-149 D問題 Prediction and Restriction
https://atcoder.jp/contests/abc149/tasks/abc149_d
方針
とにかくじゃんけんに勝つ。
K手前と同じ手は出せないのでこの場合は邪魔しないように適当な手を出しておく(nとか)
#include <stdio.h> #include <bits/stdc++.h> #include <iostream> using namespace std; int main() { int n, k, r, s, p, cnt=0; scanf("%d %d", &n, &k); scanf("%d %d %d", &r, &s, &p); char tmp[100000]; scanf("%s", tmp); for (int i = 0; i < n; i++) { if (i < k) { if(tmp[i] == 'r') cnt+=p; if(tmp[i] == 's') cnt+=r; if(tmp[i] == 'p') cnt+=s; } else { if (tmp[i-k] == tmp[i]) { cnt+=0; tmp[i] = 'n'; } else { if(tmp[i] == 'r') cnt+=p; if(tmp[i] == 's') cnt+=r; if(tmp[i] == 'p') cnt+=s; } } } cout << cnt << endl; return 0; }