AtCoder Beginner Contest 062
はい。
AtCoder Beginner Contest 062
ふつう。
A - Grouping
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define per(i,n) for(int i=n-1;i>=0;--i) #define sc1(a) scanf("%d",&a) #define sc2(a,b) scanf("%d %d",&a,&b) #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c) #define sl1(a) scanf("%lld",&a) #define sl2(a,b) scanf("%lld %lld",&a,&b) #define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define PI 3.1415926535897932 #define print(a) cout << a << endl #define pp puts("") #define Yes printf("Yes\n") #define No printf("No\n") void yneso(int a) {if(a) Yes; else No;} //int64_t はatcoderメリット不明のため long long typedef long long ll; //#define ll int64_t // int souwa(int a) {return (1+a)*a/2;} int lcm(int a,int b) { return a*b/__gcd(a,b); } //l l lcm(ll a,ll b) { return a*b/__gcd(a,b); } // double tilt(int x1,int y1,int x2,int y2) {return (1.0*y2-1.0*y1)/(1.0*x2-1.0*x1);} double tri(int xa,int ya,int xb,int yb,int xc,int yc) {return (1.0*xa-1.0*xc)*(1.0*yb-1.0*yc)-(1.0*xb-1.0*xc)*(1.0*ya-1.0*yc);} bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);}; /** sort(ar.begin(),ar.end()) * vector<vector<int>> a(5,vector<int>) int sum=accumulate(ar.begin(),ar.end(),0); do {// do内部で作られた順列に対して必要な処理を行う // cout << w.at(0) << w.at(1) << w.at(2) << endl; } while (next_permutation(w.begin(),w.end())); //ex. vector <int> w= {1,2,3}; **/ // 何か貼るときはココから下に int main(){ int mod=1e9+7; int n,k,x,y,z,cnt=0,ans=0; cin >> x >> y; //cin >> m; vector<int> a={1,3,5,7,8,10,12}; vector<int> b={4,6,9,11}; rep(i,7) { if(a.at(i)==x) ans=1; if(a.at(i)==y) cnt=1; } rep(i,4){ if(b.at(i)==x) ans=2; if(b.at(i)==y) cnt=2; } if(ans!=cnt) print("No"); else print("Yes"); return 0; }
グループを持っておいてどこに入ってるか確認するよりも数列1つでnはどこのグループとかにしておけばすぐ調べられましたね。
B - Picture Frame
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define per(i,n) for(int i=n-1;i>=0;--i) #define sc1(a) scanf("%d",&a) #define sc2(a,b) scanf("%d %d",&a,&b) #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c) #define sl1(a) scanf("%lld",&a) #define sl2(a,b) scanf("%lld %lld",&a,&b) #define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define PI 3.1415926535897932 #define print(a) cout << a << endl #define pp puts("") #define Yes printf("Yes\n") #define No printf("No\n") void yneso(int a) {if(a) Yes; else No;} //int64_t はatcoderメリット不明のため long long typedef long long ll; //#define ll int64_t // int souwa(int a) {return (1+a)*a/2;} int lcm(int a,int b) { return a*b/__gcd(a,b); } //l l lcm(ll a,ll b) { return a*b/__gcd(a,b); } // double tilt(int x1,int y1,int x2,int y2) {return (1.0*y2-1.0*y1)/(1.0*x2-1.0*x1);} double tri(int xa,int ya,int xb,int yb,int xc,int yc) {return (1.0*xa-1.0*xc)*(1.0*yb-1.0*yc)-(1.0*xb-1.0*xc)*(1.0*ya-1.0*yc);} bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);}; /** sort(ar.begin(),ar.end()) * vector<vector<int>> a(5,vector<int>) int sum=accumulate(ar.begin(),ar.end(),0); do {// do内部で作られた順列に対して必要な処理を行う // cout << w.at(0) << w.at(1) << w.at(2) << endl; } while (next_permutation(w.begin(),w.end())); //ex. vector <int> w= {1,2,3}; **/ // 何か貼るときはココから下に int main(){ int mod=1e9+7; int h,w,n,k,x,y,z,cnt=0,ans=0; cin >> h >> w; rep(i,w+2) cout << "#"; pp; string s,t; rep(i,h) { cin >> s; cout << "#" << s << "#" << endl; } rep(i,w+2) cout << "#"; pp; return 0; }
最初と最後の#
のよしなにで受け取ってすぐ出力。
C - Chocolate Bar
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define per(i,n) for(int i=n-1;i>=0;--i) #define sc1(a) scanf("%d",&a) #define sc2(a,b) scanf("%d %d",&a,&b) #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c) #define sl1(a) scanf("%lld",&a) #define sl2(a,b) scanf("%lld %lld",&a,&b) #define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define PI 3.1415926535897932 #define print(a) cout << a << endl #define pp puts("") #define Yes printf("Yes\n") #define No printf("No\n") void yneso(int a) {if(a) Yes; else No;} //int64_t はatcoderメリット不明のため long long typedef long long ll; //#define ll int64_t // int souwa(int a) {return (1+a)*a/2;} int lcm(int a,int b) { return a*b/__gcd(a,b); } //l l lcm(ll a,ll b) { return a*b/__gcd(a,b); } // double tilt(int x1,int y1,int x2,int y2) {return (1.0*y2-1.0*y1)/(1.0*x2-1.0*x1);} double tri(int xa,int ya,int xb,int yb,int xc,int yc) {return (1.0*xa-1.0*xc)*(1.0*yb-1.0*yc)-(1.0*xb-1.0*xc)*(1.0*ya-1.0*yc);} bool sankaku(int a,int b,int c) {vector <int> t={a,b,c};sort(t.begin(),t.end()); return t.at(0)+t.at(1)>t.at(2);}; /** sort(ar.begin(),ar.end()) * vector<vector<int>> a(5,vector<int>) int sum=accumulate(ar.begin(),ar.end(),0); do {// do内部で作られた順列に対して必要な処理を行う // cout << w.at(0) << w.at(1) << w.at(2) << endl; } while (next_permutation(w.begin(),w.end())); //ex. vector <int> w= {1,2,3}; **/ // 何か貼るときはココから下に int main(){ int mod=1e9+7; int h,w,n,k,x,y,z,cnt=0; ll ans=mod*5; cin >> h >> w; if(h%3==0 || w%3==0){ print(0); return 0; } if(h==2 && w==2){ print(1); return 0; } vector<ll> a(3); x=h/3; if (h>=3){ a.at(0)=x*w; a.at(1)=(h-x)/2*w; a.at(2)=(h-x+1)/2*w; sort(a.begin(),a.end()); //cout << a.at(0) << " " << a.at(1) << " " << a.at(2) << endl; if (ans>a.at(2)-a.at(0)) ans=a.at(2)-a.at(0); } if(w>=3){ y=w/3; a.at(0)=y*h; a.at(1)=(w-y)/2*h; a.at(2)=(w-y+1)/2*h; sort(a.begin(),a.end()); //cout << a.at(0) << " " << a.at(1) << " " << a.at(2) << endl; if (ans>a.at(2)-a.at(0)) ans=a.at(2)-a.at(0); } if (h>=3) {for(int i=0;i<h/2;i++) { a.at(0)=(x+i)*w; a.at(1)=(h-(x+i))*(w/2); a.at(2)=(h-(x+i))*((w+1)/2); sort(a.begin(),a.end()); //cout << a.at(0) << " " << a.at(1) << " " << a.at(2) << endl; if (ans>a.at(2)-a.at(0)) ans=a.at(2)-a.at(0); }} if (w>=3) {for(int i=0;i<w/2;i++) { a.at(0)=(y+i)*h; a.at(1)=(w-(y+i))*(h/2); a.at(2)=(w-(y+i))*((h+1)/2); sort(a.begin(),a.end()); //cout << a.at(0) << " " << a.at(1) << " " << a.at(2) << endl; if (ans>a.at(2)-a.at(0)) ans=a.at(2)-a.at(0); }} cout << ans << endl; return 0; }
四角の分け方は4通りかな。切り取りが縦のみ3分割、横のみ3分割、縦に2つに割ってから片方を更に2つに割ると├かな、横に2つに割ってから片方を更に2つに割ると┬かな。あと上のコードの後半部分の>=3って意味ないというかむしろ邪魔な条件の気がします。後で考えます。