• 合工大OJ 1344



    拿到问题,上来分析,感觉挺简单,不是双重循环就ok了吗?于是,上来就很暴力,直接上代码

    #include <stdio.h>
    int f(int n,int k)
    {
    	int i,j,d,sum;
    	d=-1;
    	sum=0;
    	for(i=1;i<=n;i++)
    	{
    		for(j=1;j<=k;j++)
    		sum+=d*i;
    		d*=-1;
    	}
    	return sum;
    }
    
    int main()
    {
    	int t;
    	int n,k;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d %d",&n,&k);
    		printf("%d
    ",f(n,k));
    	}
    	return 0;
    } 

    结果也可以想象,疯狂提交,结果疯狂

    百度搜了下,看了下别人的算法

    	#include<stdio.h>  
    	
    	int main()  
    	{  
    	    long long sum,x,y,a,b,i,z;  
    	    int n;
    	    scanf("%d",&n);  
    	    while(n--)  
    	    {  
    	        sum=0;  
    	        scanf("%I64d %I64d",&a,&b);  
    	        x=a/(b*2);//有几组?  
    	        y=a%(b*2);//余数  
    	        sum+=b*b*x;//加上每组的数!  
    	
    	        if(y<=b)  
    	        {  
    	            sum-=((x*b*2+1+x*b*2+y)*y)/2;  
    	        }  
    	        else  
    	        {  
    	            z=b-y;  
    	            sum-=((x*b*2+1+x*b*2+b)*b)/2;  
    	            sum+=((x*b*2+b+1+a)*(a-x*b*2-b))/2;  
    	        }  
    	        printf("%I64d
    ",sum);  
    	    }  
    	    return 0;
    	}

    回过头来再看看自己的算法,很明显,之前的错误现在依然存在:

    数据大,用long long!

    其次,数据大还需要使用等差数列求和。


  • 相关阅读:
    初谈面向对象
    java概述~至数组
    django一对多数据库模型
    Django url()函数详解
    python编码规范
    django的用户管理
    ubuntu下安装搜狗拼音
    乱七八糟的2013
    使用django进行微信公众平台开发
    我们要写的项目
  • 原文地址:https://www.cnblogs.com/wangxueliang/p/9346481.html
Copyright © 2020-2023  润新知