atcoder ABC149
6632 ワード
A stringでサポートされている加算で2つの文字列を加算すればよい.B c<=a a=a-cの場合.c>a a=0の場合、b=max(0,b-(c-a));C範囲内の素数は、エジプトふるいまたはオーふるいで見つけ、与えられた数以上の最小素数を見つければよい.D原題転送ゲート欲張りでいい、欲張り策略:前後2回間隔kのラウンドで同じものを出すことができないため、連続m回同じ手に対して、せいぜい(m+1)/2回しか勝つことができない.すべてのラウンドをk間隔で巡って、それぞれ勝つことができる3つのラウンド数を集計すればよい.
ACコード:
E
ACコード:
#include
#include
#include
using namespace std;
map<char,int> ans; // (r), (s), (p) 。
int main(){
int n,k;
int a1,a2,a3;
cin>>n>>k;
cin>>a1>>a2>>a3; // , , 。
string s;
cin>>s;
for(int i=0;i<k;i++){ // k
int left=i,cnt=0; //left ,cnt
for(int j=i;j<s.size();j=j+k){
if(s[j]==s[left]) cnt++; // , cnt 1,
else{
ans[s[left]]+=(cnt+1)/2;
cnt=1;
left=j; // cnt, 。
}
}
ans[s[left]]+=(cnt+1)/2;
}
int Ans=ans['r']*a3+ans['s']*a1+ans['p']*a2; // , r P , ans['r']*a3;
cout<<Ans<<endl;
return 0;
}
E