武汉大学第五届E鸣杯程序设计大赛 部分解题报告。

1000 极度坑爹啊,谁都没想到会是普通的加法。。大整数肯定能过。。呵呵A+B;

1001 http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1001&cid=374

题目也说了从大到小输出可是一排序就不对,最后听他们谁没排序就A了,我就把排序删了,可是老是PE,最后还要处理n==0是就没有人拿了输出换行(陷阱啊。。)贡献了9wa

1003 http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1003&cid=374

这道题应该不是简单题了。将每个点存起来,起点标记成1终点标记成-1,最后将起点终点一起从小排序,顺序往后查找比如10 --10 ---20--- 30是起点就加上权值,终点就减去权值。。注意+1的处理、、、才开始sum没出事话。wa好几次。。郁闷。。开空间的时候注意2*50000

#include <cstdio>

#include <iostream>

#include <algorithm>

using namespace std;

struct node

{

    int pos;

    int k;

    int flag;

}p[50007*2];

int cmp(node a,node b)

{

    return a.pos<b.pos;

}

int main()

{

    //freopen("d.txt","r",stdin);

    int t,i,a,b,w,q;

    int l,v;

    double sum;

    scanf("%d",&t);

    while(t--)

    {

        scanf("%d%d",&l,&v);

        scanf("%d",&q);

        int ct=0;

        for(i=0;i<q;i++)

        {

            scanf("%d%d%d",&a,&b,&w);

            p[ct].flag=1;

            p[ct].k=w;

            p[ct].pos=a;

            ct++;

            p[ct].flag=-1;

            p[ct].k=w;

            p[ct].pos=b;

            ct++;

        }

        sort(p,p+ct,cmp);

        sum=p[0].pos-0;

        int op=0;

        v-=p[0].pos;

        for(i=0;i<ct-1;i++)

        {

            if(p[i].flag==1)

            op+=p[i].k;

            else if(p[i].flag==-1)

            op=op-p[i].k;

            op+=1;

            if(op*(p[i+1].pos-p[i].pos)<=v)

            {

                v-=op*(p[i+1].pos-p[i].pos);

                sum+=p[i+1].pos-p[i].pos;

            }

            else

            {

                sum+=(double)v/op;

                v=0;

                break;

            }

            op--;

        }

        if(v!=0)

        {

            sum+=v/1.0;

            if(sum>l)

            sum=l;

        }

        printf("%.2lf\n",sum);

    }

    return 0;

}

  

 1004 求乘法你元素(x*b)%p==1求x..

1006 最小边对应最小角+余弦定理。

每次比赛都会发现自己的粗心,思维不够活跃,编码能力弱爆了。。加油。。

你可能感兴趣的:(程序设计)