zoukankan      html  css  js  c++  java
  • 【NOIP2014】DAY2题解+代码

    T1

    傻逼题……不想写贴昨年代码了。

    总之随便怎么搞都能过、

    15年的DAY2T1怎么那么毒瘤真是越活越倒退】

    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    using namespace std;
    ifstream fin("wireless.in");
    ofstream fout("wireless.out");
    struct lk
    {
     int x;
     int y;
     int gs;
    };
    lk citys[22];
    int fw=0,lks=0;
    int search(int xc,int yc);//查找当前范围有多少个公共设施被覆盖 
    int main(void)
    {
     fin>>fw>>lks;
     int a=0,b=0,sl=0;
     for(int i=1;i<=lks;i++)
        {
         fin>>a>>b>>sl;
         citys[i].x=a;
         citys[i].y=b;
         citys[i].gs=sl;
        }
     int ans=0,tot=0,fas=0;
     for(int i=0;i<=128;i++)
        {
         for(int j=0;j<=128;j++)
            {
             tot=search(i,j);
             if(ans==tot)fas++;
             if(ans<tot)fas=1;
             ans=max(tot,ans);
            }
        }
     fout<<fas<<" "<<ans;
     return 0;
    }
    
    int search(int xc,int yc)
    {
     int pdx=0,pdy=0,zgs=0;
     for(int i=1;i<=lks;i++)
        {
         pdx=abs(citys[i].x-xc);
         pdy=abs(citys[i].y-yc);
         if(pdx<=fw&&pdy<=fw)zgs+=citys[i].gs;
        }
     return zgs;
    }
    View Code

    T2

    先反边,求一遍终点能到的点。再预处理一下判定那些点可以出现在路径上、

    最后随便搜一下。

    这题最后一个数据专卡DFS。卡得飞起,换成了BFS之后快得飞起、】

    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    struct lb
    {
        int nw;
        int to;
    };
    lb line[200003],anti[200003];
    int n=0,m=0,head[10003]={0},anth[10003]={0};
    int cnt1=0,cnt2=0,st=0,ed=0,dis[10003]={0};
    int check[10003]={0};
    void add(int f,int t);
    void a_add(int f,int t);
    void fid(int nw);
    void solve();
    int main(void)
    {
        freopen("road.in","r",stdin);
        freopen("road.out","w",stdout);
        memset(dis,0x7f/2,sizeof(dis));
        const int INF=dis[0];
        scanf("%d%d",&n,&m);
        int a=0,b=0;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&a,&b);
            add(a,b);
            a_add(b,a);
        }
        scanf("%d%d",&st,&ed);
        check[ed]=1;
        fid(ed);
        int next=0;
        for(int i=1;i<=n;i++)
        {
            if(check[i])
            {
                for(int j=head[i];j>0;j=line[j].to)
                {
                    next=line[j].nw;
                    if(check[next]==0)
                    {
                        check[i]=-1;
                        break;
                    }
                }
            }
        }
        dis[st]=0;
        solve();
        if(dis[ed]!=INF)printf("%d",dis[ed]);
        else printf("-1
    ");
        return 0;
    }
    
    void add(int f,int t)
    {
        line[++cnt1].nw=t;
        line[cnt1].to=head[f];
        head[f]=cnt1;
        return;
    }
    
    void a_add(int f,int t)
    {
        anti[++cnt2].nw=t;
        anti[cnt2].to=anth[f];
        anth[f]=cnt2;
        return;
    }
    
    void fid(int nw)
    {
        if(nw>n)return;
        int next=0;
        for(int i=anth[nw];i>0;i=anti[i].to)
        {
            next=anti[i].nw;
            if(check[next])continue;
            check[next]=1;
            fid(next);
        }
        return;
    }
    
    void solve()
    {
        int dl[30003]={0},tou=0,wei=1,next=0;
        dl[1]=st;
        do
        {
            tou++;
            if(tou>30000)tou=1;
            for(int i=head[dl[tou]];i>0;i=line[i].to)
            {
                next=line[i].nw;
                if(dis[next]<=dis[dl[tou]]+1||check[next]!=1)continue;
                wei++;
                if(wei>30000)wei=1;
                dl[wei]=next;
                dis[next]=dis[dl[tou]]+1;        
            }
        }while(tou!=wei);
        return;
    }
    View Code

    T3

    我不会搞啊真的不会搞啊

    但是我A过QAQ昨年AC过这题QAQ

    代码贴上来好了……

    #include <algorithm>
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <cmath>
    using namespace std;
    ifstream fin("equation.in");
    ofstream fout("equation.out");
    long long int xs[110][6]={0};//系数
    const int mo[6]={0,10007,11261,14843,19997,21893};
    long long int pd[22000][5]={0};
    int N=0,M=0,ans[1001001]={0},gs=0;
    void dr(int bh);
    long long int ycl(int sum,int mox);//传说中的预处理 
    int main(void)
    {
     fin>>N>>M;
     for(int i=1;i<=N+1;i++)dr(i);
    // for(int i=1;i<=N+1;i++)cout<<xs[i][1]<<"
    ";
     for(int i=1;i<=5;i++)
        {
        for(int j=1;j<=mo[i];j++)
           {
            pd[j][i]=ycl(j,i);
           }
        }
     bool fg=false;
     for(int i=1;i<=M;i++)
        {
         fg=false;
         for(int j=1;j<=5;j++)
            {
            if(pd[i%mo[j]][j])
              {
               fg=true;
               break;
              }
            }
         if(fg==false)ans[++gs]=i;
        }
     fout<<gs<<"
    ";
     for(int i=1;i<=gs;i++)fout<<ans[i]<<"
    ";
     return 0;
    }
    
    void dr(int bh)
    {
     string s;
     bool jl=false;
     fin>>s;
     for(int i=0;i<s.size();i++)
        {
         if(s[i]=='-')jl=true;
         else 
           {
            for(int j=1;j<=5;j++)
               {
                xs[bh][j]=(xs[bh][j]*10+s[i]-'0')%mo[j];
               }
           }
        }
     if(jl)
        for(int i=1;i<=5;i++)xs[bh][i]=mo[i]-xs[bh][i];
    }
    
    long long int ycl(int sum,int mox)
    {
     long long int tot=0ll;
     for(int i=N+1;i>0;i--)
        {
         tot=(tot*sum+xs[i][mox])%mo[mox];
         //if(sum==1)cout<<tot<<"
    ";
        }
     return tot;
    }
    View Code
  • 相关阅读:
    EasyNetQ使用(八)【对延迟消息插件的支持,自动订阅者】
    EasyNetQ使用(七)【发布者确认 ,用Future Publish发布预定中事件 】
    EasyNetQ使用(六)【多态发布和订阅,消息版本控制】
    EasyNetQ使用(五)【基于主题的路由,控制队列名称】
    EasyNetQ使用(四)【Request与Response,Send与Receive】
    可伸缩系统的架构经验
    Stack Exchange 的架构
    Quora使用到的技术
    Digg工程师讲述Digg背后的技术
    由12306.cn谈谈网站性能技术
  • 原文地址:https://www.cnblogs.com/CYWer/p/6045757.html
Copyright © 2011-2022 走看看