ARC #006
A.
バグらないように全探索しましたが、バグりました。
bool型の配列を使って、当選番号にO(1)でアクセスできるようにしたほうが良かったと思います。
int main(){ int a[6],b[6],c,ans=0,l=0; for(int i = 0; i < 6; i++)cin>>a[i]; cin>>c; for(int i = 0; i < 6; i++)cin>>b[i]; for(int i = 0; i < 6; i++){ for(int j = 0; j < 6; j++){ if(a[i]==b[j]){ ans++; } else l += b[j]==c; } } if(ans==6)cout<<1; else if(ans==5&&l)cout<<2; else if(ans==5)cout<<3; else if(ans==4)cout<<4; else if(ans==3)cout<<5; else cout<<0; cout<<endl; return 0; }
B.
下から辿っていくだけですが、実装が少し難しいです。
string s[100]; int N,L; int main(){ cin>>N>>L; cin.ignore(); for(int i = 0; i <= L; i++){ getline(cin,s[i]); } //for(int i = 0; i <= L; i++)cout<<s[i]<<endl; int posi=L-1,posj; for(int i = 0; i < (2*N)-1; i++){ if(s[L][i]=='o'){ posj=i; //cout<<posj<<endl; } } while(posi>=0){ if(posj>0&&s[posi][posj-1]=='-')posj-=2; else if(posj<2*N-2&&s[posi][posj+1]=='-')posj+=2; posi--; //cout<<posj<<endl; } cout<<(posj/2+1)<<endl; return 0; }
C.
貪欲法で解けます。毎回ソートしましたが、前から見て行って、置ける場所に置けばいいようです。
int N,w[50],ans=0; vector<int> M; int main(){ cin>>N; for(int i = 0; i < N; i++)cin>>w[i]; M.push_back(w[0]); ans++; for(int i = 1; i < N; i++){ sort(M.begin(),M.end()); for(int j = 0; j <= ans; j++){ if(j==ans){ M.push_back(w[i]); ans++; } if(w[i]<=M[j]){ M[j]=w[i]; break; } } } cout<<ans<<endl; return 0; }
D.
oの数を数えて、どれに平方数を掛けたやつなのかが分かれば良かったみたいです。
129thでした