AtCoder ABC-162 B - FizzBuzz Sum

atcoder.jp

方針

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

atcoder.jp

方針

商と余りに着目。余りが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

atcoder.jp

方針

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

atcoder.jp

方針

あと何点とればいいのか、なので逆算して求めることができます。
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

atcoder.jp

方針

アルファベットを順番に配列に格納。
入力した文字に対して走査し、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;
}