読者です 読者をやめる 読者になる 読者になる

codeforces Round #176

1/22(木) TPC練習会

A問題

Problem - A - Codeforces

めっちゃ汚い

#include<iostream>
#include<string>

using namespace std;

int main()
{
  string in[4];
  for(int i=0;i<4;i++){
    cin >> in[i];
  }

  for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
      int cnt = 0, cnt2 = 0;
      if(in[i][j] == '#')cnt++;
      if(in[i+1][j] == '#')cnt++;
      if(in[i][j+1] == '#')cnt++;
      if(in[i+1][j+1] == '#')cnt++;
      if(in[i][j] == '.')cnt2++;
      if(in[i+1][j] == '.')cnt2++;
      if(in[i][j+1] == '.')cnt2++;
      if(in[i+1][j+1] == '.')cnt2++;
      if(cnt >= 3 || cnt2 >= 3){
        cout << "YES" << endl;
        return 0;
      }
    }
  }
  cout << "NO" << endl;
  return 0;
}

B問題

Problem - B - Codeforces

二分探索

#include<iostream>
#include<vector>
#include<algorithm>

typedef long long ll;

using namespace std;

int main()
{
  ll n, k;
  cin >> n >> k;

  ll l=0,r=k-1,mid,ans=-1;

  while (l<=r) {
    mid = (l + r)>>1;
    if ((2*k-mid-1)*mid>=2*n-2)r=(ans=mid)-1;
    else l=mid+1;
  }
  
  cout << ans << endl;  
  return 0;
}

C問題

Problem - C - Codeforces

n=4,5,6とかその辺を手元シミュレートでパターンが得られる。

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#define mp make_pair

using namespace std;

int main()
{
  int n;
  cin >> n;
  if(n%4>1){
    cout << -1 << endl;
    return 0;
  }

  int rem = n%4;

  for(int i=0; i<n/4; i++){
    cout << n-2*i-1 << ' ' << 1+2*i << ' ';
  }
  if(rem == 1){
    cout << n/2+1 << ' ';
  }

  for(int i=n/4-1; i>= 0; i--){
    cout << n-2*i << ' ' << 2+2*i << ' ';
  }
  cout << endl;
  return 0;
}

DEはいつか挑戦する。