http://acm.hdu.edu.cn/showproblem.php?pid=3794
晕,这一题我做的很是无语,一道很水的贪心的题目,提交了好多次,起初犯得是很SB的错误,改了,之后的思路我自己认为是完全正确的,然后发现题目的数据要求到十的七次方,十的六次方,要用到__int64,好吧,我改!晕,还是WA,我真的不知道我自己哪里错了,今天睡午觉的时候,脑海里有那一题的影子,忽然醒悟,哇,t值没有被初始化,汗,该死的错误!晚上回来后就做这道题,我改,改了,还是WA,无语啦,好想求救,网上搜了一下,发现大家都是用的__int64即输入的那些值也是这种类型的,其他的思路是一样的,那么我改改试一试吧,A了,真想死啊,好折磨人的一道题啊,被这道水题这么折磨,只能说明自己能力不到,~~~~(>_<)~~~~ 要加油啊,Shirlies!
#include "stdio.h"
#include "stdlib.h"
__int64 cp[1000005];//输入的数据得用__int64啊,可是sum+=cp[i]*value[j]不是可以自动转换成sum,__int64型的吗?以后得注意这个问题啊
__int64 value[1000005];
int cmp(const void *a,const void *b)
{
return *(__int64 *)b-*(__int64 *)a;
}
int main()
{
int n,m;
__int64 sum;
int i,j,t;
while(scanf("%d",&n)&&n>=0)
{
for(i=1;i<=n;i++)
{
scanf("%I64d",&cp[i]);
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%I64d",&value[i]);
}
qsort(cp+1,n,sizeof(__int64),cmp);//O(∩_∩)O哈哈~这次用qsort()竟然用正确了,不过这种用法是最简单的,我之后还加了一输出测试了一下看我写的是不是正确的,哈,排序结果是正确的……(提交时删了那测试)
qsort(value+1,m,sizeof(__int64),cmp);
t=1;//该死的t啊,为什么我昨天没有耐心检查呢,我查错的能力有待提高啊。关键是第一个for语句不循环时t值是未知的,所以必须得初始化。
sum=0;
for(i=1,j=1;i<=n&&j<=m;)
{
if(cp[i]>=0&&value[j]>=0)
{
sum+=cp[i]*value[j];
i++;
j++;
t=i;
}
else
break;
}
for(i=n,j=m;i>=t&&j>=t;)
{
if(cp[i]<0&&value[j]<0)
{
sum+=cp[i]*value[j];
i--;
j--;
}
else
break;
}
printf("%I64d\n",sum);
}
return 0;
}
自己纠错的能力有问题,还有就是自己找错的耐心不到啊