武汉大学第五届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 最小边对应最小角+余弦定理。

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

posted @ 2011-11-27 20:05  E_star  阅读(414)  评论(0)    收藏  举报