Educational Codeforces Round 84 Div2

A.Sum of Odd Integers

原题

题意:给你 n 和 k ,问你 n 能否由 k 个不同的奇数组成

首先只有 k 和 n 的奇偶性相同才有可能,其次 k 个奇数最小能组成的数必须小于等于 n ,即 k*k<=n 才可以

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
       ll n,k;
       scanf("%lld%lld",&n,&k);
       if((n%2&&k%2)||(n%2==0&&k%2==0))
       {
        if(n>=k*k)
            printf("YES\n");
         else
            printf("NO\n");
       }
       else
       {
          printf("NO\n");
       }
    }
return 0;
}

B.Princesses and Princes

原题

这题也太长了吧TnT

题意:给你个数字 n,然后给你 n 个区间,对于每个区间,你要选择该区间中没有被选择过的最小的数,如果到最后你选择的数不足 n 个,你可以让任意一个没有选择过数的区间选择任意一个没被选择的数(先打印 IMPROVE ),否则打印 OPTIMAL

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[100005],v[100005];
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n,x,ans=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
           int j,k,flag=0,t;
           scanf("%d",&k);
           for( j=1;j<=k;j++)
           {
             scanf("%d",&t);
             if(!v[t]&&!flag)
             {
                v[t]=1;
                flag=1;
                ans++;
             }
           }
           if(flag==0)//没有选过数,把这个区间记下来
            x=i;
        }
        if(ans==n)
            printf("OPTIMAL\n");
        else
        {
            printf("IMPROVE\n");
            printf("%d ",x);
            for(int i=1;i<=n;i++)
            {
              if(!v[i])
                {printf("%d\n",i);
                break;
                }
            }
        }
        memset(v,0,sizeof(v));
    }
return 0;
}

C.Game with Chips

原题

题意:在一个 N*M 的矩阵中,给你 k 个起始点和 k 个目标点,你可以进行移动操作,每次可以让所有起始点向同一个方向移动一格,要让每个点至少走一遍它对应的目标点,总移动次数不超过 2*N*M 次。

直接先把所有点都聚集到左上方(该操作肯定不超过 N*M 次),再直接从左上角跑到右下角,把整张图跑一遍(该操作肯定不超过 N*M 次),总共移动次数不超过 2*N*M 次

#include<bits/stdc++.h>
using namespace std;
struct p
{
    int x,y;
} v[250];
struct m
{
    int x,y;
} c[250];
char step[100000005];
int main()
{
    int n,m,k,cot=1,maxx=-1,maxy=-1;
    cin>>n>>m>>k;
    for(int i=1; i<=k; i++)
    {
        scanf("%d%d",&v[i].x,&v[i].y);
        maxx=max(v[i].x,maxx);
        maxy=max(v[i].y,maxy);
    }
    for(int i=1; i<=k; i++)
    {
        scanf("%d%d",&c[i].x,&c[i].y);
    }
    for(int i=1; i<maxx; i++)
    {
        step[cot++]='U';
    }
    for(int j=1; j<maxy; j++)
    {
        step[cot++]='L';
    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<m; j++)
        {
            if(i%2)
                step[cot++]='R';
            else
                step[cot++]='L';
        }
        if(i!=n)
            step[cot++]='D';
    }
    printf("%d\n",cot-1);
    for(int i=1; i<=cot-1; i++)
        printf("%c",step[i]);
    return 0;
}

posted @ 2020-03-24 12:18  Pecoz  阅读(104)  评论(0编辑  收藏  举报