武汉大学第五届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 最小边对应最小角+余弦定理。
每次比赛都会发现自己的粗心,思维不够活跃,编码能力弱爆了。。加油。。


浙公网安备 33010602011771号