log的用法(可以说是淋漓尽致了)

来源:互联网 发布:inpho软件的价格 编辑:程序博客网 时间:2024/04/30 12:45

题目链接:点击打开链接

该题目做的到后来的时候就是没有注意数据范围,以至于这道题是做废了,还是自己心里面有点心急,现在正在看2016年world final在泰国举办,感觉那种感觉就是不一样,反正感觉他们就是很细心,读题能力和做题能力都很强,虽然没有身临其境,但也有深刻体会,当然也见到了各种神级的解说员,都是历年来在比赛中的神级人物,时间一分分过去了,这个时候的时间感觉也是无比的珍贵,正如杭电选手csy(claris),据说一年级刷够两千题,而且都不是水题,顿时感觉自己好low,不是好low,简直是没有入门,现在已经有人能够全部ac了,这个水平,我也是无力来回复了,还是弱,,,,,后年是world  final 已经移位到北大,这个让我很是激动,我感觉我也是预言家了,我很是喜欢北大!!!这个是我的观战感想,也是心灵的震撼,,,,也是orz了,下面言归正传,看这道题目,

#include <stdio.h>#include<string.h>#include<math.h>double num[1001][21];int a[1001]; //记录每列的负数个数double s[1001];  //每列的和int main(int argc, char *argv[]){    int n,m,i,j;long long  d;    while(scanf("%d%d",&m,&n)!=EOF)    {        memset(a,0,sizeof(a));        memset(s,0,sizeof(s));        for(i=0; i<n; i++)            for(j=0; j<m; j++)            {                scanf("%lld",&d);                if(d<0)                {                    if(a[j]>-1)                        a[j]++;//                        判断负数的个数                    num[i][j]=log(-1.0*d);                }                else if(d==0)                {                    a[j]=-1;  //该列存在0,则该列等于0                }                else                    num[i][j]=log(1.0*d);//                    正数直接忽略            }        double s1=-1.0e12,s3=1.0e12;//        这个值是什么作用,现在还不知道 ,先往下看看          int k1=-1,k2=-1,k3=-1;//        这里又有一个数值,可是并不知道是什么作用,先往下看看        for(i=m-1; i>=0; i--) //从右开始        {            if(a[i]==-1&&k2==-1)            {                k2=i;    //该列存在0,则该列等于0                continue;            }            if(a[i]==-1&&k2>-1)  //防止重复赋值                continue;            for(j=0; j<n; j++)            {                s[i]+=num[j][i];            }            if(a[i]%2  && s[i]<s3) //寻找负数最小的            {                s3=s[i];                k3=i;            }            else if(a[i]%2==0  && s[i]>s1)   //寻找正数里最大的            {                s1=s[i];                k1=i;            }        }        if(k1!=-1)           //如果存在正数            printf("%d\n",k1+1);        else if(k2!=-1)     //如果存在0            printf("%d\n",k2+1);        else                 //只有负数            printf("%d\n",k3+1);    }    return 0;}利用log的性质,来实现数据的加减
写出这个代码感觉也是思路比较厉害的,但是这样减小数据之后,感直接排序也会过的,我去问下问题,那个乘以1.0就是转化一下浮点数,原来我还是不知道呢,

0 0