题意:扔石子打水漂游戏,四个参数评判好坏,跳跃次数,最后在水中位置,初始位置,和单步跳跃长度,除了最后一项,其他都是越大越好,求最好的扔法。
题解:数据也太小了吧。。
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 struct data 6 { 7 int ct,len,ip,sk; 8 bool operator<(const data &ne)const 9 { 10 if(ct!=ne.ct) 11 return ct<ne.ct; 12 if(len!=ne.len) 13 return len<ne.len; 14 if(ip!=ne.ip) 15 return ip<ne.ip; 16 if(sk!=ne.sk) 17 return sk>ne.sk; 18 } 19 data(){} 20 data(int _ct,int _len,int _ip,int _sk) 21 { 22 ct=_ct; 23 len=_len; 24 ip=_ip; 25 sk=_sk; 26 } 27 }; 28 int main() 29 { 30 char s[100]; 31 while(gets(s),strcmp(s,"END")!=0) 32 { 33 int lent=strlen(s); 34 data ans(s[lent-1]=='.',lent-1,lent-1,1),tp; 35 for(int ip=0;ip<lent;ip++) 36 { 37 tp=data(s[ip]=='.',ip,ip,1); 38 if(ans<tp) 39 ans=tp; 40 for(int sk=1;sk+ip<lent;sk++) 41 { 42 int ct=0,len; 43 while(ip+ct*sk<lent&&s[ip+ct*sk]=='.') 44 ct++; 45 len=ip+ct*sk; 46 tp=data(ct,min(len,lent-1),ip,sk); 47 if(ans<tp) 48 ans=tp; 49 } 50 } 51 printf("%d %d\n",ans.ip,ans.sk); 52 } 53 return 0; 54 }