首页 > 代码库 > 2016年11月15日noip模拟赛

2016年11月15日noip模拟赛

苟..

技术分享

 

 

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

 

 

今天题目难度还好。。

 

2016年11月15日noip模拟赛