苟..
1.谜题
1 /* 2 考虑这题,该怎么xjb搞 3 嗯我说出了题解xjb搞。。 4 由题意 易得 N个 二位数字(一位数加个0) 如果是连续的,那么就成立。 5 反过来做。 6 7 方法2:n<4有解,其他无解 8 */ 9 #include <iostream> 10 #include <cmath> 11 #include <stdio.h> 12 #include <string> 13 #include <string.h> 14 using namespace std; 15 int main() 16 { 17 int n,i; 18 freopen("puzzle.in","r",stdin); 19 freopen("puzzle.out","w",stdout); 20 scanf("%d",&n); 21 for (i=0;i<=99;i++) 22 { 23 bool flag=0; 24 for (int j=i;j<=i+n;j++) 25 { 26 int wwd,lxy; 27 if (j<10)wwd=0,lxy=j; 28 else wwd=j/10,lxy=j%10; 29 if (wwd==2 || wwd==3 || wwd==4 || wwd==5 || wwd==7 || lxy==2 || lxy==3 || lxy==4 || lxy==5 || lxy==7) 30 { 31 flag=1; 32 break; 33 } 34 } 35 if (!flag) 36 { 37 38 cout<<"YES"<<endl; 39 return 0; 40 } 41 } 42 cout<<"XLSB"<<endl; 43 return 0; 44 }
faq
2.选修课
#include <iostream> #include <stdio.h> #include <algorithm> #include <cmath> #include <string> #include <string.h> using namespace std; char a[233333]; int num[1000]={}; long long c[5001][5001]; bool cmp(int x,int y) { return x>y; } int main() { int n,i,j; freopen("course.in","r",stdin); freopen("course.out","w",stdout); scanf("%s",a); scanf("%d",&n); int len=strlen(a); for (i=0;i<len;i++) num[a[i]-‘a‘]++; sort(num,num+26,cmp); int ans=0; for (i=0;i<=n-1;i++) ans+=num[i]; cout<<ans<<endl; int sps=0; int adln=0; for (i=0;i<=n-1;i++) if (num[i]==num[n-1]) sps++; for (i=0;i<=26;i++) if (num[i]==num[n-1]) adln++; c[0][0]=1ll; for (i=1;i<=26;i++) { c[i][0]=1; for (j=1;j<=i;j++) c[i][j]=(long long)c[i-1][j]+c[i-1][j-1]; } cout<<c[adln][sps]<<endl; return 0; }
faq
3.质数
/* kotori: 首先考虑,质数<=根号n的情况 我们考虑 根号n以内的质数所组成的最优方案吧。 可以搜索。(大概) 再考虑根号n以后的质数的方案 “好难啊。。不会写啊” GG */ #include <iostream> #include <stdio.h> #include <algorithm> #include <cmath> #include <string> #include <string.h> using namespace std; int prime[2333]; bool light[23333]={};int maxsqrt=1; int maxnum_233=0;int n,m; void faq() { int i,j,temp=0; for (i=maxsqrt+1;i<=m;i++) {int rem=0;int kotori=0; for (j=prime[i];j<=n;j+=prime[i]) {if (!light[j]) rem++; else kotori++;} if (rem>kotori) {for (j=prime[i];j<=n;j+=prime[i]) {if (!light[j]) light[j]=1; else light[j]=0;}} } for (i=1;i<=n;i++) if (light[i]) temp++; maxnum_233=max(temp,maxnum_233); } void dfs(int x) { //cout<<x; //cout<<233; //while(1); if (x>maxsqrt) {faq();return ;} else {dfs(x+1); for (int i=prime[x];i<=n;i+=prime[x]) {if (light[i])light[i]=0; else light[i]=1;} dfs(x+1);} } int main() { int i,j,T;//暴力搜索一下根号n以内的最优解吧。。 freopen("prime.in","r",stdin); freopen("prime.out","w",stdout); scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); maxsqrt=1; int minsqrt=m; maxnum_233=0;//忘记清0辣然后一直找错误。。。QAQ memset(light,0,sizeof(light)); for (i=1;i<=m;i++) scanf("%d",&prime[i]); sort(prime+1,prime+m+1); for(i=1;i<=m;i++) if (prime[i]<=sqrt(n)) maxsqrt=i; dfs(1); cout<<maxnum_233<<endl; } return 0; }
faq
今天题目难度还好。。
时间: 2024-11-05 02:32:22