寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

AtCoder Programming Guide for beginners (APG4b) #2.01 ~ 2.06 in C++

AtCoder Programming Guide for beginners (APG4b)から、「第2章 複雑な計算処理の書き方」の提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
競技プログラミング」を略して、「競プロ」などと呼ばれています。

AtCoder Programming Guide for beginners (APG4b)
atcoder.jp

僕が作成、提出したコードは、以下のとおりです。

/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX16. 2.01 - 隣り合う同じ値を探す
https://atcoder.jp/contests/APG4b/tasks/APG4b_cg
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int n=5;
  vector<int> a(n);
  for(int i=0;i<n;i++){
    cin>>a[i];
    if(i>0){
      if(a[i]==a[i-1]){
        cout<<"YES"<<endl;
        return 0;
      }
    }
  }
  cout<<"NO"<<endl;
  return 0;
}
/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX17. 2.02 - 果物屋さんでお買い物
https://atcoder.jp/contests/APG4b/tasks/APG4b_cf
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int n,s,count=0;
  cin>>n>>s;
  vector<int> a(n),p(n);
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  for(int i=0;i<n;i++){
    cin>>p[i];
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      if((a[i]+p[j])==s){
        ++count;
      }
    }
  }
  cout<<count<<endl;
  return 0;
}
/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX18. 2.03 - ゲーム大会
https://atcoder.jp/contests/APG4b/tasks/APG4b_ce
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int n,m;
  cin>>n>>m;
  
  //a[i],b[i]に入力
  vector<int> a(m),b(m);
  for(int i=0;i<m;i++){
    cin>>a[i]>>b[i];
  }
  
  //二次元配列"game"を作り、値(o,x,-)を代入
  vector<vector<char>> game(n,vector<char>(n,'-'));
  for(int i=0;i<m;i++){
    a[i]--;
    b[i]--;
    game[a[i]][b[i]]='o';
    game[b[i]][a[i]]='x';
  }
  
  //"試合結果の表"を出力
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cout<<game[i][j];
      if(j==(n-1)){
        cout<<endl;
      }else{
        cout<<" ";
      }
    }
  }
  return 0;
}
/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX19. 2.04 - 九九の採点
https://atcoder.jp/contests/APG4b/tasks/APG4b_cs
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int co=0,wr=0,n=9;
  vector<vector<int>> a(n,vector<int>(n));
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      int mul=(i+1)*(j+1);
      cin>>a[i][j];
      if(j==8){
        cout<<mul<<endl;
      }else{
        cout<<mul<<" ";
      }
      if(a[i][j]==mul){
        co+=1;
      }else{
        wr+=1;
      }
    }
  }
  cout<<co<<endl;
  cout<<wr<<endl;
  return 0;
}
/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX20. 2.05 - 報告書の枚数
https://atcoder.jp/contests/APG4b/tasks/APG4b_cc
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
int count_report_num(vector<vector<int>> &vec,int x){
  if(vec[x].size()==0){
    return 1;
  }
  int report=1;
  for(int i : vec[x]){
    report+=count_report_num(vec,i);
  }
  return report;
}
int main(void){
  int n;
  cin>>n;
  vector<int> p(n);
  for(int i=1;i<n;i++){
    cin>>p[i];
  }
  p[0]=-1;
  vector<vector<int>> child(n);
  for(int i=1;i<n;i++){
    child.at(p[i]).pb(i);
  }
  for(int i=0;i<n;i++){
    cout<<count_report_num(child,i)<<endl;
  }
}
/*
AtCoder Programming Guide for beginners (APG4b) in C++
#EX21. 2.06 - 計算量の見積もり
https://atcoder.jp/contests/APG4b/tasks/APG4b_cb
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include <bits/stdc++.h>
using namespace std;
int f0(int N) {
  return 1;
}

int f1(int N, int M) {
  int s = 0;
  for (int i = 0; i < N; i++) {
    s++;
  }
  for (int i = 0; i < M; i++) {
    s++;
  }
  return s;
}

int f2(int N) {
  int s = 0;
  for (int i = 0; i < N; i++) {
      int t = N;
      int cnt = 0;
      while (t > 0) {
        cnt++;
        t /= 2;
      }
      s += cnt;
  }
  return s;
}

int f3(int N) {
  int s = 0;
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
      s++;
    }
  }
  return s;
}

int f4(int N) {
  int s = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      s += i + j;
    }
  }
  return s;
}

int f5(int N, int M) {
  int s = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      s += i + j;
    }
  }
  return s;
}

int main() {
  int N, M;
  cin >> N >> M;

  int a0=-1,a1=-1,a2=-1,a3=-1,a4=-1, a5=-1;

  // 計算量が最も大きいもの1つだけコメントアウトする
  a0 = f0(N);
  a1 = f1(N, M);
  a2 = f2(N);
  a3 = f3(N);
  // a4 = f4(N);
  a5 = f5(N, M);
  cout << "f0: " << a0 << endl;
  cout << "f1: " << a1 << endl;
  cout << "f2: " << a2 << endl;
  cout << "f3: " << a3 << endl;
  cout << "f4: " << a4 << endl;
  cout << "f5: " << a5 << endl;
}

AtCoder Beginner Contestは、オンラインジャッジによるプログラミングコンテストです。
日本語と英語に対応していて、週末ごとに実施されているみたいです。
https://practice.contest.atcoder.jp/tutorial
アカウントを登録すれば、誰でも参加できます。