Codeforces#355

大小号刷题,大号,被查重,悲剧,最后小号过了3题

A题:

分析:大于h的+2,小于等于h的+1

 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=202;
15 int a[maxn];
16 int n,h;
17 int main()
18 {
19     while(cin>>n>>h)
20     {
21         long long sum=0;
22         for(int i=0;i<n;i++){
23             int x;
24             scanf("%d",&x);
25             if(x>h)
26                 sum+=2;
27             else
28                 sum+=1;
29         }
30         cout<<sum<<endl;
31     }
32     return 0;
33 }
View Code

B题:

题意:有n个长度分别为a1,a2.....an的木棒,每次可以削掉长度为k的,放入机器的最大长度不能大于h,一根接着一根地放入,问怎么才能用最少的次数

分析:看清题意发现是水题,一根接着一根放入,则我们判断一下上一根剩余的加上下一根的长度是否大于h,若大于,则只把剩余部分放入机器,否则把剩余部分和下一根一起放入机器

 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 int  a[maxn];
16 int k,n,h;
17 int main()
18 {
19     while(cin>>n>>h>>k)
20     {
21         memset(a,0,sizeof(a));
22         for(int i=0;i<n;i++)
23             scanf("%d",&a[i]);
24         int t,f;
25         long long cnt=0;
26         for(int i=0;i<n;i++){
27             t=a[i]/k; //需要几刀
28             f=a[i]%k; //切完之后当前这段还剩多少
29             cnt+=t;
30             if(a[i+1]+f>h){  //不能切分
31                 cnt++;
32             }else{  //可以切分
33                 a[i+1]+=f;
34             }
35         }
36         if(f) cnt++;
37         cout<<cnt<<endl;
38     }
39     return 0;
40 }
View Code

C题:

题意:一个字符串里面的字符分别代表不同的数,字符串的每个数是由两个不同的数按位&得到的,问这样的组合最多有多少个

分析:若是0,则有0&0,1&0,0&1,3种,若是1只有1&1这1种,因此就是统计每个数的二进制有多少个0即可

 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 mod=1000000007;
15 const int maxn=100010;
16 char str[maxn];
17 long long num[maxn];
18 long long  solve(char s ){
19     long long x;
20     if(s>='0'&&s<='9')
21         x=s-'0';
22     else if(s>='A'&&s<='Z')
23         x=s-'A'+10;
24     else if(s>='a'&&s<='z')
25         x=s-'a'+36;
26     else if(s=='-')
27         x=62;
28     else
29         x=63;
30     return x;
31 }
32 int main()
33 {
34 
35     scanf("%s",str);
36     int n=strlen(str);
37     long long ans=1;
38     for(int i=0;i<n;i++){
39         long long x=solve(str[i]);
40         for(int j=0;j<6;j++){
41             if((x&(1<<j))==0)
42                 ans=ans*3%mod;
43         }
44     }
45     cout<<ans<<endl;
46     return 0;
47 }
View Code
原文地址:https://www.cnblogs.com/wolf940509/p/5553653.html