zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 沈阳赛区网络预赛 K题

    题目链接:

    https://nanti.jisuanke.com/t/31452

    AC代码(看到不好推的定理就先打表!!!!):

    #include<bits/stdc++.h>
    using namespace std;
    # define maxn 40000+100
    int a[maxn];
    int b[maxn];
    int ans=0;
    char s[1000];
    int c[maxn];
        int ti=0;
    void f()
    {
        memset(c,0,sizeof(c));
        memset(b,0,sizeof(b));
        memset(a,0,sizeof(a));
        for(int i=2; i<=maxn; i++)
        {
            if(a[i])continue;
            b[i]=1;
            c[++ans]=i;
            for(int j=i; j<=maxn; j+=i)
            {
                a[j]=1;
            }
        }
    }
    bool judge(int t)
    {
        int y=t;
        int t1=0,t2=0,t3=0,t4=0,t5=0,t6=0;
        int num=0;
        int w[220];
        memset(w,0,sizeof(w));
        while(t)
        {
            int g=t%10;
            w[++num]=g;
            if(b[g]==0)return false;
            t=t/10;
        }
        if(num==3)
        {
            t1=w[num]*10+w[num-1];
            t2=w[num-1]*10+w[num-2];
            t3=w[num-1]*10+w[num];
            t4=w[num-2]*10+w[num-1];
            t5=w[1]*10+w[3];
            t6=w[3]*10+w[1];
        }
        if(t1!=0&&b[t1]==0)return false;
        if(t2!=0&&b[t2]==0)return false;
        if(t3!=0&&b[t3]==0)return false;
        if(t4!=0&&b[t4]==0)return false;
        if(t5!=0&&b[t5]==0)return false;
        if(t6!=0&&b[t6]==0)return false;
        printf("Case #%d: %d
    ",++ti,y);
        return true;
    }
    int main()
    {
        f();
        b[1]=1;
        int n;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",s);
            int len=strlen(s);
            if(len>=4)printf("Case #%d: %d
    ",++ti,317);
            else
            {
                int temp=0;
                for(int i=0; i<len; i++)
                {
                    temp=temp*10+(s[i]-'0');
                }
                int t=lower_bound(c+1,c+ans+1,temp)-c;
                if(c[t]!=temp)
                {
                    t--;
                    for(int j=t; j>=1; j--)
                    {
                        if(judge(c[j]))break;
                    }
                }
                else
                {
                    for(int j=t; j>=1; j--)
                    {
                        if(judge(c[j]))break;
                    }
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    java后台读取配置文件
    冒泡排序
    均分火柴
    Dos 批处理 Shutdown
    时间复杂度分析
    Python冒泡排序
    Python装饰器
    获取状态栏高度
    利用zxing生成二维码
    Android下利用zxing类库实现扫一扫
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262920.html
Copyright © 2011-2022 走看看