zoukankan      html  css  js  c++  java
  • 集训队日常训练20180513-DIV2

    A.2176

    给一个字符串s,问距离为D的字母对是否存在相同。

    模拟。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        string s,b;
        while(cin>>s)
        {
            if(s[0]=='*')break;
            int flag=1;
            map<string,int>ma;
            for(int jump=1;jump<s.size();jump++)
            {
                ma.clear();
                for(int L=0;L+jump<s.size();L++)
                {
                    b.clear();
                    b+=s[L];
                    b+=s[L+jump];
                    if(ma[b]==0)ma[b]=1;
                    else
                    {
                        flag=0;
                        break;
                    }
                }
                if(flag==0)break;
            }
            if(flag)cout<<s<<" is surprising.
    ";
            else cout<<s<<" is NOT surprising.
    ";
        }
        return 0;
    }
    A.cpp

    B.4694

    给两堆糖果,每次从多的那堆拿gcd(a,b)个糖果,lemon先拿,问最后俩人糖果数。

    模拟。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a,b;
        while(cin>>a>>b,a||b)
        {
            int le=0,yu=0,sum=1;
            while(a||b)
            {
                if(sum%2)le+=__gcd(a,b);
                else yu+=__gcd(a,b);
                if(a>b)a-=__gcd(a,b);
                else b-=__gcd(a,b);
                sum++;
                if(a==0||b==0)
                {
                    if(sum%2)le+=a+b;
                    else yu+=a+b;
                    break;
                }
            }
            cout<<le<<" "<<yu<<endl;
        }
        return 0;
    }
    B.cpp

    C.5259

    给若干多项式和一个x,问多项式值最大和按值分组输出相同值最多的个数。

    模拟。

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll mul(ll a, ll b,int x)
    {
        if(b == 0) return a;
    
        while(b--) a*= x;
        return a;
    }
    int main()
    {
        int t; cin >> t;
        while(t--)
        {
            map<ll,int> mp;
            ll  n, x; cin >> n >> x;
            int maxx = -1;
            while(n--)
            {
                ll k,sum = 0; cin >> k;
                while(k--)
                {
                    ll a, b; cin >> a >> b;
                    sum += mul(a,b,x);
                }
                mp[sum]++;
                maxx = max(maxx,mp[sum]);
            }
            map<ll,int>::reverse_iterator it=mp.rbegin();
            cout << it->first << " " << maxx << endl;
        }
        return 0;
    }
    C.cpp

    D.5265

    给一个围棋谱,问黑棋还需要下在哪才能全围住白棋。

    广搜。

    #include<bits/stdc++.h>
    using namespace std;
    char a[25][25];
    int dtx[4]={0,0,1,-1};
    int dty[4]={1,-1,0,0};
    int check(int i,int j)
    {
        for(int z=0;z<4;z++)
        { 
            int I=i+dtx[z],J=j+dty[z];
            if(I>=0&&I<19&&J>=0&&J<19)
            { 
                if(a[I][J]=='W')
                return 1;
            }
        }
        return 0;
    }
    int main()
    {
        while(gets(a[0])!=NULL)
        {
            for(int i=1;i<19;i++)
                gets(a[i]);
            int sum=0;
            for(int i=0;i<19;i++)
                for(int j=0;j<19;j++)
                {
                    if(a[i][j]=='.')
                        if(check(i,j))
                            cout<<i+1<<" "<<j+1<<endl,sum++;
                }  
            if(sum==0)cout<<"YuYu Wins!
    ";           
        }
        return 0;
    }
    D.cpp

    E.5260

    给一个1-n的序列,问全排列连接起来第x个数字是几。

    模拟。

    #include <bits/stdc++.h>
    using namespace std;
    int s[1000000];
    int main()
    {
        int n,x,a[7],b[7],i,z,s1,flag,s2,k;
        while(~scanf("%d%d",&n,&x))
        {
            s1=n;flag=0;s2=0;k=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&z);
                a[i]=b[i]=z;
            }
            sort(a+1,a+n+1);
            for(i=2;i<=n;i++)
                s1*=i;
            sort(a,a+n);
            do
            {
                for(i=1;i<=n;i++)
                {
                    if(a[i]!=b[i]) break;
                }
                if(i>n) flag=1;
                if(!flag) s2++;
                for(i=1;i<=n;i++)
                    s[k++]=a[i];
            }while(next_permutation(a+1,a+n+1));
            x+=s2*n;
            x%=s1;
            if(x!=0) x--;
            printf("%d
    ",s[x]);
        }
        return 0;
    }
    E.cpp

    F.4702

    给币值为1,3,5,7,9,13的硬币的个数和糖果的价格g,问最少需要多少枚硬币组成g。

    背包。

    #include<iostream>                                  
    #include<stdio.h>                                   
    #include<math.h>                                    
    using namespace std;
    int dp[5001];
    const int LIM=1e9;
    int main()                                          
    {                                                   
        int w[6]={1,3,5,7,9,13};                           
        int v[6];                                          
        int t=0,g;                                         
        while(t!=7)                                        
        {                                                  
            int ans=0;
            t=0;
            for(int i=0;i<6;i++)
            {
                cin>>v[i];
                if(v[i]==0)t++;
            }
            cin>>g;
            if(g==0)
                if(t==6)
                    break;
            for(int i=1;i<=g;i++)
                dp[i]=LIM;
            for(int i=0;i<6;i++)
                for(int j=1;j<=v[i];j++)
                    for(int k=g;k>=w[i];k--)
                        dp[k]=min(dp[k-w[i]]+1,dp[k]);
            if(dp[g]==LIM)cout<<"impossible"<<endl;
            else cout<<dp[g]<<endl;
        }
        return 0;
    }
    F.cpp

    G.3331

    给一个2n*2n的网格图,以中心为原点画一个直径为2n-1的圆,问圆周线穿过了多少个格子。

    思维。

    #include<bits/stdc++.h>
    using namespace std;
    int arr[1005];
    int main()
    {
        int n;
        arr[1]=4;
        for(int i=2;i<=1004;i++){
            arr[i]=arr[i-1]+8;
        }
        while(cin>>n&&n!=0){
            cout << arr[n] <<endl;
        }
        return 0;
    }
    G.cpp

    H.4671

    给n个数,求前M大并按小到大输出。

    只需要记录前M个。

    #include<bits/stdc++.h>
    using namespace std;
    int get() {
     int r=0;
     char c;
     while(c=getchar(),!(c>='0'&&c<='9'));
     r = c-'0';
     while(c=getchar(),c>='0'&&c<='9')
      r = (r*10)+c-'0';
     return r;
    }
    int main()
    {
        int n,m,x,b[11],len=0;
        n=get();
        m=get();
        for(int i=1;i<=n;i++)
        {
            x=get();
            if(len<m)b[len++]=x;
            else 
                for(int j=0;j<m;j++)
                    if(b[j]<x)
                        swap(b[j],x);
        }
        sort(b,b+m);
        for(int i=0;i<m;i++)
        {
            if(i!=0)printf(" ");
            printf("%d",b[i]);
        }
        putchar('
    ');
        return 0;
    }
    H.cpp

    I.4959

    给n个数,问能否选若干数使和=k。

    深搜。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[21],i,k;
    bool dfs(int i,int sum)
    {
        if(i==n)
        {
            if(sum==k)return 1;
            return 0;
        }
        if(dfs(i+1,sum))return 1;
        if(dfs(i+1,sum+a[i]))return 1;
        return 0;
    }
    int main()
    {
        while(cin>>n>>k)
        {
            for(i=0;i<n;i++)cin>>a[i];
            if(dfs(0,0))printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
     }
    I.cpp

    J.4374

    n个特工,密钥总量为k(编号为0到k-1),以及每个特工所带的m个密钥,求是否每3个特工的密钥都可以解密文件。

    模拟。

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k;
    int check(int a[])
    {    for(int i=0;i<m;i++)
            if(a[i]==0)
            return 0;
            return 1;
    }
    int main()
    {     
           while(cin>>n>>m>>k)
           {  vector<int> v[10];
             for(int i=0;i<n;i++)
               { int x;  
                for(int j=0;j<k;j++)
                  {cin>>x;
                  v[i].push_back(x);}
                } 
                int flag=1;
                for(int i=0;i<n;i++)
                { for(int j=i+1;j<n;j++)
                     {for(int z=j+1;z<n;z++)
                       { int a[11]={0};
                         for(int t=0;t<k;t++)
                            { a[v[i][t]]=1;
                            a[v[j][t]]=1;
                            a[v[z][t]]=1;
                             } 
                              if(!check(a))flag=0;
                       }
                    }
                }
                if(flag)cout<<"YES
    ";
                else cout<<"NO
    ";
           }
    }
    J.cpp
  • 相关阅读:
    linux ubuntu系统安装及卸载oracle xe11.2.0
    32位和64位的应用软件区别是什么
    在Ubuntu Server下安装Oracle XE
    虚拟化系列Citrix XenServer 6.1 安装与配置
    Oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
    敏捷开发资料站推荐
    win7中竟然没有telnet.exe??
    Eclipse+Tomcat+Ant 小记
    为已有的web project项目加入maven支持,并使用myeclipse的插件.
    .NET性能优化数据库方面的总结
  • 原文地址:https://www.cnblogs.com/taozi1115402474/p/10851209.html
Copyright © 2011-2022 走看看