1/22(木) TPC練習会
A問題
めっちゃ汚い
#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問題
二分探索
#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問題
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はいつか挑戦する。