LoginSignup
1
1

More than 3 years have passed since last update.

部内バチャ解説 (PCK対策2.5 by コン研)

Last updated at Posted at 2019-09-11

 1問目

↓回答済み
B - チーム戦 (Teamwork)

 2問目

↓回答済み
B - ㍻の終焉を告げる

 3問目

↓回答済み
A - ニコニコ文字列判定

 4問目

↓回答済み
A - WAsedAC

 5問目

↓回答済み
A - Still TBD

6問目

問題リンク: https://atcoder.jp/contests/abc132/tasks/abc132_a

解説

ソートする

ソートすると条件を満たす場合は1文字目と2文字目が一緒になり,3文字目と4文字目が一緒になることがわかると思います.
そして,2文字目と3文字目の文字が違っていたら"Yes"を表示しましょう.

#include <bits/stdc++.h>
using namespace std;

int main() {
  string s;
  cin >> s;
  sort(s.begin(),s.end());
  if(s.at(0)==s.at(1) && s.at(1)!=s.at(2) && s.at(2)==s.at(3))cout << "Yes" << endl;
  else cout << "No" << endl;
}

全探索

全探索したら特定の文字を基準にした時その文字と同じ文字はそれ自身を含めて二つなはずです.

#include <bits/stdc++.h>
using namespace std;

int main() {
  string s;
  cin >> s;
  for(int i=0;i<4;i++){
    int cnt=0;
    for(int j=0;j<4;j++)if(s.at(i)==s.at(j))cnt++;
    if(cnt!=2){
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}

7問目

問題リンク: https://atcoder.jp/contests/cpsco2019-s1/tasks/cpsco2019_s1_a

解説

最小となる値は本の数を3で割って切り上げた値です.
一方,最大の値は チーム数 か 本の個数 のうちの小さい方です.

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n,a;
  cin >> n >> a;
  cout << (a+2)/3 << " " << min(n/3,a) << endl;
}

8問目

↓回答済み
C - 異世界転生

9問目

↓回答済み
B - 文字列大好きいろはちゃんイージー

10問目

↓回答済み
B - Two Anagrams

11問目

↓回答済み
B - Some Sums

12問目

↓回答済み
B - Long Long Ago

13問目

問題リンク: https://atcoder.jp/contests/abc080/tasks/abc080_b

解説

下記のコードのwhile文のような処理で各桁の総和を取得可能です.
これは過去記事でもなんども言及してあるので今回は割愛させていただきます.

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  int cp = n;
  int sum=0;
  while(cp){
    sum += cp%10;
    cp /= 10;
  }
  if(n%sum)cout << "No" << endl;
  else cout << "Yes" << endl;
}

14問目

問題リンク: https://atcoder.jp/contests/abc088/tasks/abc088_b

解説

コメントを参考に確認してください

#include<bits/stdc++.h>
using namespace std;
int main(){

    //入力部
    int n;
    vector<int> a(100);
    cin >> n;
    for(int i=0;i<n;i++)cin >> a.at(i);

    //計算部
    sort(a.begin(),a.end()); //ソート関数でソートします(今回の配列長ならバブルソートでも可)
    reverse(a.begin(),a.end());// 昇順から降順に反転

    int even = 0, odd = 0; //偶数、奇数それぞれの要素の総和を格納する変数を用意
    for(int i=0;i<n;i++){
        if(i%2) odd += a.at(i); // 奇数個目の要素なら
        else even += a.at(i); // 偶数個目の要素なら
    }

    //出力部
    cout << even-odd << endl;
    return 0;
}

15問目

リンク: https://atcoder.jp/contests/abc095/tasks/abc095_b

解説

まずはXからN種類のドーナツを作る際の必要な量だけ減らします.
その後,最も必要なこなの量が少ないドーナツの小麦量でそれを割ります.
この割った結果と最初に作ったN個のドーナツの数を足せば答えが出ます.

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,x;
    cin >> n >> x;

    int MIN = 10000;
    for(int i=0;i<n;i++){
      int a;
      cin >> a;
      x-=a;
      MIN = min(MIN,a);
    }

    cout << n+x/MIN << endl;
}

16問目

↓回答済み
A - 値札

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1