大小号刷题,大号,被查重,悲剧,最后小号过了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 }
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 }
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 }