Cdoefroces #354

A题

题意:给定一些数,然后求一次交换以后最大的数和最小的数之间的最大距离

分析:找到最大数和最小数的位置,然后判断是把位置大的移到最后还是把位置小的移到开始位置即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=200;
15 int a[maxn];
16 int main()
17 {
18     int n;
19     while(cin>>n)
20     {
21         int minx,maxx;
22         for(int i=1;i<=n;i++)
23             cin>>a[i];
24         for(int i=1;i<=n;i++){
25             if(a[i]==1)
26             {
27                 minx=i; break;
28             }
29         }
30         for(int i=1;i<=n;i++){
31             if(a[i]==n){
32                 maxx=i; break;
33             }
34         }
35         if(minx>maxx)
36             swap(minx,maxx);
37         cout<<maxx-minx+max(minx-1,n-maxx)<<endl;
38     }
39     return 0;
40 }
View Code

 

B题

题意:给定一些倒香槟的杯子,第一层1个,第二层2个,依此下去,问第t秒有多少个杯子水是满的

分析:为了考虑精度问题,我们将t乘1024,然后进行模拟,对每1秒流下的水,到下下一层以后一定会变成(a[i][j]-1)/2

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=15;
15 const int inf=1<<10;
16 int a[maxn][maxn];
17 int n,t;
18 int main()
19 {
20     while(cin>>n>>t)
21     {
22         memset(a,0,sizeof(a));
23         a[1][1]=t*inf;
24         int ans=0;
25         for(int i=1;i<=n;i++)
26             for(int j=1;j<=i;j++){
27                 if(a[i][j]>=inf){
28                     ans++;
29                     a[i+1][j]+=(a[i][j]-inf)/2;
30                     a[i+1][j+1]+=(a[i][j]-inf)/2;
31                 }
32             }
33         cout<<ans<<endl;
34     }
35     return 0;
36 }
View Code

 

C题

题意:给定一个字符串,可以改变其中k个字母,问最大的重复字串长度,字符串只含有a和b

分析:这题是一个原题,对于区间[l,r],看其上0的数量是否大于k,若小于k,则[l+1,r]必然也小于k,统计[1,n]上的最大长度即可。统计的时候用二分思想,然后分别对a和b进行统计,最后求其最大值即可。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=100010;
15 char s[maxn];
16 int a[maxn],b[maxn],dp1[maxn],dp2[maxn];
17 int n,k;
18 int main()
19 {
20     while(cin>>n>>k)
21     {
22         memset(dp1,0,sizeof(dp1));
23         //memset(a,0,sizeof(a));
24         scanf("%s",s);
25         for(int i=0;i<n;i++){
26             int t=i;
27             if(s[i]=='a')
28                 a[++t]=1;
29             else
30                 a[++t]=0;
31         }
32         //for(int i=1;i<=n;i++)
33         //    cout<<a[i];
34         //cout<<endl;
35         for(int i=1;i<=n;i++){
36             if(!a[i])
37                 dp1[i]=dp1[i-1]+1;
38             else
39                 dp1[i]=dp1[i-1];
40             
41         }
42         int left1=0,right1=0,mx1=0,j1=0;
43         for(int i=1;i<=n;i++){
44             while(dp1[i]-dp1[j1]>k) j1++;
45             if(mx1<i-j1){
46                 mx1=i-j1;
47                 left1=j1+1;
48                 right1=i;
49             }
50         }
51 
52         memset(dp2,0,sizeof(dp2));
53         //memset(b,0,sizeof(b));
54         for(int i=0;i<n;i++){
55             int h=i;
56             if(s[i]=='b')
57                 b[++h]=1;
58             else b[++h]=0;
59         }
60 
61         for(int i=1;i<=n;i++){
62             if(!b[i])
63                 dp2[i]=dp2[i-1]+1;
64             else
65                 dp2[i]=dp2[i-1];
66         }
67         int left2=0,right2=0,mx2=0,j2=0;
68         for(int i=1;i<=n;i++){
69             while(dp2[i]-dp2[j2]>k) j2++;
70             if(mx2<i-j2){
71                 mx2=i-j2;
72                 left2=j2+1;
73                 right2=i;
74             }
75         }
76         cout<<max(mx1,mx2)<<endl;
77     }
78     return 0;
79 }
View Code

 

posted @ 2016-05-27 12:53  wolf940509  阅读(128)  评论(0编辑  收藏  举报