AtCoder Beginner Contest 043
はい。
AtCoder Beginner Contest 043
気温差と雨降りとかご勘弁?
A - キャンディーとN人の子供イージー
#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 n,k,x,y,z,cnt=0,ans=0; cin >> n; print(souwa(n)); return 0; }
souwa。いつも忘れるので用意してあるsouwa。
B - バイナリハックイージー
#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(){ string s,t=""; cin >> s; rep(i,s.size()){ if(s.at(i)=='B') { int x=t.size(); x=max(0,x-1); t=t.substr(0,x); } else { t=t+s.at(i); } } print(t); return 0; }
文字列操作。ありがとうsubstr。
C - いっしょ
#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,x,y,z,cnt=0,ans=mod; cin >> n; vector<int> a(n); rep(i,n) cin >> a.at(i); sort(a.begin(),a.end()); x=a.at(0); y=a.at(n-1); for(int i=x;i<=y;i++){ cnt=0; rep(j,n){ z=abs(a.at(j)-i); cnt+=z*z; } ans=min(ans,cnt); } print(ans); return 0; }
数列aのmin maxの範囲で全部試す。
D - アンバランス
#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=-1,y=-1,z,cnt=0,ans=0; string s,t; cin >> s; if(s.size()==2 && s.at(0)==s.at(1)) {x=1;y=2;} else if(s.size()==2 && s.at(0)!=s.at(1)) {x=-1;y=-1;} else { for(int i=0;i<s.size()-2;i++){ if(s.at(i)==s.at(i+1) || s.at(i)==s.at(i+2) || s.at(i+1)==s.at(i+2)) {x=i+1;y=i+3;break;} } } cout << x << " " << y << endl; return 0; }
特定区間の文字列で過半数が同じ。文字列長で2文字しかなくて2文字とも同じ、文字列長が3文字以上なら3文字しか見ないでずらしていって3文字中で2文字同じかどうか。3文字中で2文字同じにならなければそれ以上の長さの区間をチェックしようとしてもあまり意味はなさそう。
5文字中3文字同じで過半数とかだとしてもその中の3文字で過半数が成立する箇所があるはずなので。