2016年11月15日noip模拟赛

苟..

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 }
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

今天题目难度还好。。

原文地址:https://www.cnblogs.com/yz12138/p/6064997.html