苟..
1.谜题
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 int main() 5 { 6 freopen("puzzle.in","r",stdin); 7 freopen("puzzle.out","w",stdout); 8 int n; 9 cin>>n; 10 if (n<=4) cout<<"YES"; 11 else cout<<"XLSB"; 12 return 0; 13 }
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; }
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; }
今天题目难度还好。。