Shirlies
宁静专注认真的程序媛~

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;
}

自己纠错的能力有问题,还有就是自己找错的耐心不到啊

posted on 2011-12-12 22:51  Shirlies  阅读(473)  评论(0编辑  收藏  举报