Codeforces Round #335 (Div. 2) 总结

来源:互联网 发布:大数据平台功能 编辑:程序博客网 时间:2024/06/16 18:31

A:题意是:没两个一样的颜色,可以转换成另一种颜色,给你3中颜色a,b,c。问能否构成x,y,z。(x,y,z分别代表三种颜色)

很简单,直接模拟就是了

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){    int a,b,c,x,y,z;    while(scanf("%d%d%d",&a,&b,&c)!=EOF)    {        scanf("%d%d%d",&x,&y,&z);        if(a>=x&&b>=y&&c>=z)        {            printf("Yes\n");            continue;        }        int cnt=0;        int x1=a-x,y1=b-y,z1=c-z;        int sum=x1+y1+z1;        int Max=max(x1,max(y1,z1));        int Min=min(x1,min(y1,z1));        int Z=sum-Max-Min;      //  printf("%d %d %d\n",Max,Z,Min);        if(Max>=0&&Z>=0&&Min>=0)        {            printf("Yes\n");            continue;        }        if(Max>=0&&Z>=0&&Min<0)        {            if((Max/2+Z/2)>=(-Min))            {                printf("Yes\n");            }            else            {                printf("No\n");            }            continue;        }        if(Max>=0&&Z<0&&Min<0)        {           if(Max/2>=(-Z-Min))           {               printf("Yes\n");           }           else           {               printf("No\n");           }           continue;        }        printf("No\n");    }    return 0;}
C题:给你一串数列,问你最少排多少次,才可以让数列从小到大排列。

直接离散化,求最长上升子序列,然后n-len就可以了

#include<stdio.h>#include<algorithm>using namespace std;const int maxm=1e5+10;struct node{    int x,id;}t[maxm];int cmp(node p,node q){    return p.x<q.x;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int i=1;i<=n;i++)        {            scanf("%d",&t[i].x);            t[i].id=i;        }        sort(t+1,t+n+1,cmp);        int cnt=0;        int Max=0;        for(int i=1;i<=n;i++)        {            if(t[i].id>t[i-1].id)            {                cnt++;            }            else            {                cnt=1;            }            Max=max(Max,cnt);        }        printf("%d\n",n-Max);    }    return 0;}



0 0
原创粉丝点击