题意:扔石子打水漂游戏,四个参数评判好坏,跳跃次数,最后在水中位置,初始位置,和单步跳跃长度,除了最后一项,其他都是越大越好,求最好的扔法。

题解:数据也太小了吧。。

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 }