zoukankan      html  css  js  c++  java
  • 长沙多校联合训练

    A题,一个简单的bfs

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #define maxn 100009
     
    using namespace std;
    int vis[maxn];
    vector<int>ve[maxn];
    queue<int>q;
     
    bool bfs(int s)
    {
        int l;
        vis[s]=1;
        q.push(s);
        while(!q.empty())
        {
            int v=q.front();
            q.pop();
            l=ve[v].size();
            for(int i=0; i<l; i++)
            {
                int u=ve[v][i];
                if(vis[u]==0)
                {
                    q.push(u);
                    vis[u]=vis[v]+1;
                }
                else if(vis[u]==vis[v]||vis[u]>vis[v]+1)
                    return 0;
            }
        }
        return 1;
    }
     
    int main()
    {
        int n,m,s;
        int t;
        int ca=1;
        scanf("%d",&t);
        while(t--)
        {
            int x,y;
            memset(vis,0,sizeof vis);
            scanf("%d%d%d",&n,&m,&s);
            for(int i=0; i<n; i++)ve[i].clear();
            for(int i=0; i<m; i++)
            {
                scanf("%d%d",&x,&y);
                ve[x].push_back(y);
                ve[y].push_back(x);
            }
            while(!q.empty())q.pop();
            printf("Case %d: ",ca++);
            if(bfs(s))puts("NO");
            else puts("YES");
        }
        return 0;
    }
    View Code

    G题,找规律的题;

    #include<cstdio>
    #include<algorithm>
    #define maxn 104
    #include<cstring>
    using namespace std;
     
    int sor[maxn][maxn];
    int tar[maxn][maxn];
    int cot1[maxn];
    int cot2[maxn];
     
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)&&(n+m)>0)
        {
            memset(cot1,0,sizeof cot1);
            memset(cot2,0,sizeof cot2);
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m; j++)
                {
                    scanf("%d",&sor[i][j]);
                    if(sor[i][j]==1)cot1[i]++;
                }
            }
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m; j++)
                {
                    scanf("%d",&tar[i][j]);
                    if(tar[i][j]==1)cot2[i]++;
                }
            }
            bool flag=1;
            for(int i=0; i<n; i++)
            {
                if(cot1[i]+cot2[i]!=m&&cot1[i]!=cot2[i])
                    flag=0;
            }
            int cnt_1=0,cnt_2=0;
            if(flag)
            {
                for(int i=0; i<n; i++)
                {
                    for(int j=0; j<i; j++)
                    {
                        cnt_1=0,cnt_2=0;
                        for(int k=0; k<m; k++)
                        {
                            if(sor[i][k]==sor[j][k])
                                cnt_1++;
                            if(tar[i][k]==tar[j][k])
                                cnt_2++;
                        }
                        if(cnt_1!=cnt_2&&cnt_1+cnt_2!=m)
                        {
                            flag=0;
                            break;
                        }
                    }
                    if(flag==0)
                        break;
                }
            }
            if(flag)puts("Yes");
            else puts("No");
        }
        return 0;
    }
    View Code

    H题,dp

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    #define maxn 10009
    #define mod 9997
    using namespace std;
     
    long long dp[maxn][2];
     
    int main()
    {
        memset(dp,0,sizeof dp);
        int n;
        dp[1][0]=1;
        dp[1][1]=1;
        dp[2][1]=2;
        dp[2][0]=2;
        for(int i=3;i<10009;i++)
        {
            dp[i][0]+=dp[i-1][0]+dp[i-1][1];
            if(dp[i][0]>mod)dp[i][0]%=mod;
            dp[i][1]+=dp[i-1][0]-dp[i-2][1]+mod+mod;
            dp[i][1]+=dp[i-1][1];
            if(dp[i][1]>mod)dp[i][1]%=mod;
        }
        while(scanf("%d",&n)&&n!=-1)
        {
            printf("%lld
    ",(dp[n][1]+dp[n][0])%mod);
        }
        return 0;
    }
    View Code

    I题,二分

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 200009
    #define ll long long
    using namespace std;
     
    int num[maxn];
    ll k;
    int n;
     
    bool check(int mid)
    {
        int m=n/mid;
        int ma=0;
        ll ans=0;
        for(int i=1; i<=n; i++)
        {
            if(!mid)break;
            ma=max(ma,num[i]);
            if(i%m==0)
            {
                mid--;
                ans+=ma;
                ma=0;
            }
        }
        if(ans>k)return 1;
        else return 0;
    }
     
    int main()
    {
        while(scanf("%d%lld",&n,&k)&&n!=-1)
        {
            ll cnt=0;
            for(int i=1; i<=n; i++)
            {
                scanf("%d",&num[i]);
                cnt+=num[i];
            }
            if(cnt<=k)
            {
                puts("-1");
                continue;
            }
            int l=1;
            int r=n;
            while(l<r)
            {
                int mid=(l+r)/2;
                if(check(mid))r=mid;
                else l=mid+1;
            }
            printf("%d
    ",l);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    asp.net 邮件发送,使用外部stmp服务器,呵呵!简单例子
    asp.net 新闻采集 简单示例
    JS 计算时间差
    textarea行尾输入多个空格不换行
    mac系统安装redis
    RSA 分段加解密【解决“不正确的长度”的异常】
    C# 获取指定进程的主窗口句柄
    .Net自定义控件之ToolboxBitmap元数据的设置
    提升 SharePoint 代码执行权限
    关于ThreadLocal的使用
  • 原文地址:https://www.cnblogs.com/yours1103/p/3590417.html
Copyright © 2011-2022 走看看