zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 83 (Rated for Div. 2)A--C

      地址http://codeforces.com/contest/1312

        题意:给出一个边数为n的等边多边形,问是否可以变成m的等边多边形。条件是同一个中心,共用原顶点。

        解析:直接n%m==0即可,这样就是平分了。签到题没得说了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    typedef long long ll;
    const int maxn=1e4;
    int pr[maxn];
    int find(int x)
    {
        if(x!=pr[x])
            return pr[x]=find(pr[x]);
            return x;
    }
    void join(int x1,int x2)
    {
        int f1=find(x1),f2=find(x2);
        if(f1!=f2)
        {
            pr[f1]=f2;
        }
        return ;
    }
    int main()
    {
        int    t;
        cin>>t;
        while(t--)
        {
            int n,m;
            cin>>n>>m;
            if(n%m==0)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
    }

        题意:把给定数组任意排列,保证i<j时,j-a[j]!=i-a[i]。输出任意一组答案。

        解析:sort一下从大到小排列即可。看数据的话,暴力也是可以的。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<map>
    using namespace std;
    typedef long long ll;
    int a[105];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>a[i];    
            while(1)
            {
                int ok=0;
                for(int i=1;i<=n;i++)
                {
                    for(int j=i+1;j<=n;j++)
                    {
                        if((j-a[j])==(i-a[i]))
                        {
                            ok=1;break;
                        }
                    }
                    if(ok)
                        break;
                }
                if(!ok)
                    break;
                for(int i=1;i<=n;i++)
                {
                    for(int j=i+1;j<=n;j++)
                    {
                        if((j-a[j])==(i-a[i]))
                        {
                            swap(a[i],a[j]);
                        }
                    }
                }
            }
            for(int i=1;i<n;i++)
                cout<<a[i]<<" ";
                cout<<a[n]<<endl;
        }    
    
    }

        题意:给你一个个数为n的数组a[],判断是否可以由相同大小的全0数组v[]变换而来。

             变换规则:

                1.在第i次操作时,你可以给数组v任意位置的值加上k^i

                2.在第i次什么也不做。

        解析:这其实就是一个进制的题。对于任意一个a【i】假设k进制对其有n位:a[i]= x0* k^0 +x1* k^1 +x2* k^2 +……+x(n-1)* k^n-1

           而这个题对于k^i的i,是不断递增的,即每个i只能出现一次。所以我们只要知道每个k^i的系数,大于1,就是NO了。

           举个例子:二进制,k=2  

                      5  6

           5的二进制表示为101,2为110,101

                          110    可以看出,2^2那里出现了两次,肯定不服题意了。

           这里用vis[]来记录各个k^i的出现次数,记住vis是与实际转化的k进制数方向是相反的。vis[]+=a[i]%k,这个a[i]%k,就是系数,即次数。最后注意一下vis[]开的大些

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<map>
    using namespace std;
    typedef long long ll;
    const int maxn=40;
    const int maxn2=100;
    ll a[maxn];
    int vis[maxn2];
    int t;
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            int n,k;
            scanf("%d%d",&n,&k);
            for(int i=0;i<n;i++)
                scanf("%lld",&a[i]);
            memset(vis,0,sizeof(vis));
            int ok=0;
            for(int i=0;i<n;i++)
            {
                int tot=0;
                while(a[i])
                {
                    tot++;
                    vis[tot]+=a[i]%k;
                    a[i]=a[i]/k;
                    if(vis[tot]>1)
                    {
                        ok=1;break;
                    }
                }
                if(ok)
                    break;
            }
            if(!ok)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
    }
  • 相关阅读:
    数据库学习笔记5---MySQL字符串函数、日期时间函数
    关于hibernate的AnnotationConfiguration的问题
    浅谈Java web 中request的setAttribute()用法
    JAVA常见面试题之Forward和Redirect的区别
    JSP页面中<%!%>与<%%>与<%=%>
    Servlet的生命周期
    JavaEE学习路线图
    java web项目WEB-INF与META-INF的作用
    iOS-申请邓白氏编码的超详细流程介绍
    从高版本JDK换成低版本JDK报错
  • 原文地址:https://www.cnblogs.com/liyexin/p/12464988.html
Copyright © 2011-2022 走看看