Codeforces Round #274 (Div. 2) 解题报告_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:56:03
原创
1145人浏览过

题目地址:http://codeforces.com/contest/479

这次自己又只能做出4道题来。

A题:Expression

水题。

枚举六种情况求最大值即可。

立即学习前端免费学习笔记(深入)”;

代码如下:

猫眼课题宝
猫眼课题宝

5分钟定创新选题,3步生成高质量标书!

猫眼课题宝 85
查看详情 猫眼课题宝
#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题: Towers

水题。

每次都是将最多的拿出一个给最少的,直到最大的与最少的相差小于或等于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题: Exams

还是水。。小贪心

小贪心。先按标记日期排个序,然后扫一遍即可,能用小的就优先考虑小的。

代码如下:

#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题:

还是水。。。。二分。

分别考虑4种情况,x,y,x+y,y-x。然后用二分找差值为这四个数的。

代码如下:

#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;}
登录后复制



HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号