最初鯖落ちしててはんぱなかった。ていうか2問しか解けなかったヤバイ。Eは解けそうで解けなかった。Dに至っては見てない。
A
文字列a,bが入力され、bがaの反転文字列になっているか判定。
#include <iostream> #include <algorithm> using namespace std; int main(){ string a,b; cin >> a >> b; reverse(b.begin(),b.end()); cout << (a==b?"YES":"NO") << endl; }
B
なんか日によって為替レートが違う。それで儲けたい。"一回のみ売買できる。"(いつ買っていつ売ればいいか。)。最大で儲けれる額を出力せよ。
一回のみしか売買出来ないこと知らなくて、これで通したら、pretest通ったのにWA出た。
int main(){ int n,b; cin >> n >> b; vector<int> data(n); rep(i,n){ cin >> data[i]; } int now = b; rep(i,n-1){ if( data[i] < data[i+1]){ now = (now / data[i])*data[i+1] + (now % data[i]); } } cout << now << endl; }
プラクティス
int main(){ int n,b; cin >> n >> b; vector<int> data(n); rep(i,n)cin >> data[i]; int ret = b; rep(i,n){ for(int j=i+1;j<n;j++){ ret = max(ret, (b / data[i])*data[j] + (b % data[i]) ); } } cout << ret << endl; }
C
両端に記号使えない。atは一回。dotは何度でも。辞書順で最小のものを返せ。
.の方が小さいとか考えてたけど全く無意味だった。一応通った。
int main(){ string s; cin >> s; int f = 0; while(~s.find("dot")){ int pos = s.find("dot"); s.replace(pos,3,"."); } if(s[0] == '.')s.replace(0,1,"dot"); if(s[s.length()-1] == '.')s.replace(s.length()-1,1,"dot"); vector<int> at; f = 0; int pos; while(pos = s.find("at",f), ~pos ){ at.push_back(pos); f = pos+1; } string ret = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; rep(i,at.size()){ string t = s; t.replace(at[i],2,"@"); if(t[0] == '@' || t[t.length()-1] == '@')continue; ret = min(ret,t); } cout << ret << endl; }
D
見てない。
E
解けそうで解けなかったうーん。机上計算が誤っていたことに気づかずWA出しまくった。