ホームページ >ウェブフロントエンド >htmlチュートリアル >Codeforces ラウンド #274 (ディビジョン 2) ソリューション Report_html/css_WEB-ITnose

Codeforces ラウンド #274 (ディビジョン 2) ソリューション Report_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:56:03991ブラウズ

質問アドレス: http://codeforces.com/contest/479

今回は4つの質問しか答えられません。

質問A: 表現

水の質問。

6 つの状況を列挙し、最大値を見つけるだけです。

コードは次のとおりです:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64int main(){    LL a, b, c, d[10];    while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF)    {        d[0]=a*b*c;        d[1]=(a+b)*c;        d[2]=a+b+c;        d[3]=a*(b+c);        d[4]=a+b*c;        d[5]=a*b+c;        sort(d,d+6);        printf("%I64d\n",d[5]);    }    return 0;}

質問B: 塔

水の質問。

毎回、最大のものと最小のものの差が 1 以下になるまで、最大のものを取り出し、最小のものに与えます。

コードは次のとおりです:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64struct node{    int x, num;}fei[1000];int cmp(node x, node y){    return x.x<y.x;}int a[2000], b[2000];int main(){    int n, m, i, j, cnt, ans;    while(scanf("%d%d",&n,&m)!=EOF)    {        for(i=0;i<n;i++)        {            scanf("%d",&fei[i].x);            fei[i].num=i;        }        cnt=0;        while(m--)        {            sort(fei,fei+n,cmp);            if(fei[n-1].x-fei[0].x<=1) break;            a[cnt]=fei[n-1].num;            b[cnt++]=fei[0].num;            fei[n-1].x--;            fei[0].x++;        }        sort(fei,fei+n,cmp);        printf("%d %d\n",fei[n-1].x-fei[0].x, cnt);        for(i=0;i<cnt;i++)        {            printf("%d %d\n",a[i]+1,b[i]+1);        }    }    return 0;}

質問C: 試験

まだ水です。 。小さな欲

小さな欲。まず、マークされた日付で並べ替えて、小さいものを使用できる場合は、小さいものを優先してスキャンします。

コードは次のとおりです:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64struct node{    int x, y;}fei[6000];int cmp(node x, node y){    if(x.x==y.x)        return x.y<y.y;    return x.x<y.x;}int main(){    int n, i, j, ans, k, x1, x2;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)        {            scanf("%d%d",&fei[i].x,&fei[i].y);        }        sort(fei,fei+n,cmp);        k=1;        for(i=0;i<n;i++)        {            if(fei[i].y>=k)            {                k=fei[i].y;            }            else            {                k=fei[i].x;            }        }        printf("%d\n",k);    }    return 0;}

質問 D:

静止水。 。 。 。 2点。

x、y、x+y、y-x の 4 つの状況をそれぞれ考えてみましょう。次に、2 つの点を使用して、これら 4 つの数値の差を見つけます。

コードは次のとおりです:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64int a[110000];int bin_search(int x, int y, int high){    int low=0, mid;    while(low<=high)    {        mid=low+high>>1;        if(y-a[mid]==x) return 1;        else if(y-a[mid]>x) low=mid+1;        else high=mid-1;    }    return 0;}int main(){    int n, l, x, y, i, j, k, flag1, flag2;    while(scanf("%d%d%d%d",&n,&l,&x,&y)!=EOF)    {        flag1=flag2=0;        for(i=0; i<n; i++)        {            scanf("%d",&a[i]);            if(a[i]==x)                flag1=1;            if(a[i]==y)                flag2=1;        }        if(flag1&&flag2)        {            printf("0\n");        }        else        {            flag1=flag2=0;            for(i=1;i<n;i++)            {                if(bin_search(x,a[i],i-1))                {                    flag1=1;                    break;                }            }            for(i=1;i<n;i++)            {                if(bin_search(y,a[i],i-1))                {                    flag2=1;                }            }            if(flag1&&flag2)            {                printf("0\n");            }            else if(flag1) printf("1\n%d\n",y);            else if(flag2) printf("1\n%d\n",x);            else            {                int flag=0;                for(i=1;i<n;i++)                {                    if(bin_search(y+x,a[i],i-1))                    {                        flag=1;                        break;                    }                }                if(flag)                {                    printf("1\n%d\n",a[i]-x);                }                else                {                    flag=0;                    for(i=1;i<n;i++)                    {                        if(bin_search(y-x,a[i],i-1)&&(a[i]-y>=0||a[i]+x<=l))                        {                            flag=1;                            break;                        }                    }                    if(flag&&a[i]-y>=0)                    {                        printf("1\n%d\n",a[i]-y);                    }                    else if(flag&&a[i]+x<=l)                    {                        printf("1\n%d\n",a[i]+x);                    }                    else                    {                        printf("2\n%d %d\n",x,y);                    }                }            }        }    }    return 0;}



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。