はい。
AtCoder Beginner Contest 048
あーうーうー?
A - AtCoder *** Contest
#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;}
typedef long long ll;
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int 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);};
int main(){
int mod=1e9+7;
int n,k,x,y,z,cnt=0,ans=0;
string a,b,c;
cin >> a >> b >> c;
cout << a.at(0) << b.at(0) << c.at(0) << endl;
return 0;
}
先頭1文字ずつ。
B - Between a and 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;}
typedef long long ll;
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int 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);};
int main(){
int mod=1e9+7;
ll a,b,x,y,z,cnt=0,ans=0ll;
cin >> a >> b >> x;
ans=b/x;
if (a!=0ll) ans-=(a-1ll)/x;
else ans++;
print(ans);
return 0;
}
bまでまとめて数えてa手前を引く。0は割り切れる扱い。
C - Boxes and Candies
#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;}
typedef long long ll;
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int 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);};
int main(){
int mod=1e9+7;
int n,k,x,y,z,cnt=0;
ll ans=0ll;
cin >> n >> x;;
vector<int> a(n);
rep(i,n) cin >> a.at(i);
rep(i,n-1){
y=(a.at(i)+a.at(i+1))-x;
if(y>0) {
ans+=y;
a.at(i+1)=max(0,a.at(i+1)-y);
}
}
print(ans);
return 0;
}
最左からみてペアの右を優先しながら減らしていきました。
D - An Ordinary Game
#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;}
typedef long long ll;
int souwa(int a) {return (1+a)*a/2;}
int lcm(int a,int 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);};
int main(){
int mod=1e9+7;
string s;
cin >> s;
if(s.at(0)==s.back()) {
cout << ((s.size()%2)?"Second":"First") << endl;
}else{
cout << ((s.size()%2)?"First":"Second") << endl;
}
return 0;
}
さっぱりわからなかった。検索してなんとかAC。
ゲーム終了は2種の文字だけ残るはず。3種類目があったら文字列3文字以上でそれを取り除ける形のはず。
abやabab、abaがあり得る最終形かな。最終形を考えることは開放の発見に役に立つのだろうか。。。
先頭と末尾同じで長さが奇数なら2番手の勝ち。
abcba acba aca
とかかな?2番手がacaの形にして手番を回すと、1番手が何も出来なくて2番手の勝ち。
先頭と末尾同じで長さが偶数なら1番手の勝ち。
abca aca
1番手がacaの形にして手番を回すと、2番手が何も出来なくて1番手の勝ち。
先頭と末尾が異なって、長さが奇数なら1番手の勝ち。
abc ac
1番手がacの形にして、2番手が何も出来なくて1番手の勝ち。
先頭と末尾が異なって、長さが偶数なら2番手の勝ち。
abcb acb ab
1番手がacbの形にして、2番手がabの形にして、1番手が何も出来なくて2番手の勝ち。
なのかな。ACしたif分岐を書き出したつもりのこの論理が合ってるか不明ですけど。
これを時間中に気づく、組み立てる出来るまでは結構な訓練が必要そう。長さ偶奇に注目はあるあるですけど。