1051: Glamor Sequence

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 16  Solved: 5
[Submit][Status][Web
Board
]

Description

you have a sequence +1, +2, +3, ... +m, -(m + 1), -(m + 2), ..., -(2m), (2m + 1), (2m + 2), ..., (3m), .....
and you need calculator sum of the first n items.

Input

For each test case, there is a line contains two integers n and m, (1 <= m <= n <= 1000000000).

Output

For each test case, print sum of the first n items.

Sample Input

8 2
10 3

Sample Output

-8
5

HINT

For the first sample, the sequence is 1, 2, -3, -4, 5, 6, -7, -8, so the answer is -8.

For the second sample, the sequence is 1, 2, 3, -4, -5, -6, 7, 8, 9, -10, so the answer is 5.

想了很久还是不会。问了同学大概思路,确是用等差数列求和公式,但是先前的做法效率比较低,用了for循环,一旦出现n比较大而m非常小的话就会超时,比如n=1000000000,m=1,test测试一下5秒多。

因此一种思路是这样:

可以发现从1开始前2*m项的和的绝对值是一个常数即m,e=n-n%(2*m)那么只需处理后面e+1~n的数字即可。因此可以有如下规律

设剩下的区间为e+1~n(也可能是e+m)。

1、若e+m<=n——即数轴分布情况为e+1~e+m~n。只需将之前的所有完整段的和加上Sum[e+1,e+m]即可,且每一项都是正数。

2、若e+m>n——即数轴分布情况为e+1~n~e+m。那么要计算S1[e+1,n]与S2[n+1,e+m],ans=ans+S1-S2。

代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void)
{
long long n,m,e;
long long ans;
while (~scanf("%lld%lld",&n,&m))
{
e=n-n%(2*m);
ans=(e)*(-m)/2;//所有完整段求和
if(e+m<n)//分类讨论
{
ans=ans+(2*e+1+m)*m/2;
ans=ans-(e+m+1+n)*(n-e-m)/2;
}
else if(e+m>n)
{
ans=ans+(e+1+n)*(n-e)/2;
}
else
{
ans=ans+(2*e+1+m)*m/2;
}
printf("%lld\n",ans);//这题要用long long来储存答案
}
return 0;
}

ACM程序设计选修课——1051: Glamor Sequence(YY+求和公式)的更多相关文章

  1. ACM程序设计选修课——1058: Lucky Sequence(思考)

    1058: Lucky Sequence Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 52  Solved: 6 [Submit][Status][ ...

  2. ACM程序设计选修课——1043: Radical loves integer sequences(YY)

    1043: Radical loves integer sequences Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 4 ...

  3. ACM程序设计选修课——1040: Alex and Asd fight for two pieces of cake(YY+GCD)

    1040: Alex and Asd fight for two pieces of cake Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 27   ...

  4. ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)

    1036: Hungar的菜鸟赛季 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 20  Solved: 14 [Submit][Status][Web ...

  5. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

  6. ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)

    问题 A: (ds:队列)打印队列 时间限制: 1 Sec  内存限制: 128 MB 提交: 25  解决: 4 [提交][状态][讨论版] 题目描述 网络工程实验室只有一台打印机,它承担了非常繁重 ...

  7. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  8. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  9. ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. Netbackup8.0以上版本,服务端生成证书,客户端获取、更新证书方式(整理中)

    创建重发令牌 如果非主控主机已在主服务器上注册但其基于主机ID的证书不再有效,则可以重新颁发基于主机ID的证书.例如,证书在过期,被撤销或丢失时无效. 重发令牌是一种可用于重新颁发证书的令牌.它是一种 ...

  2. lca(最近公共祖先(离线))

    转自大佬博客 : https://www.cnblogs.com/JVxie/p/4854719.html   LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先 ...

  3. oracle 数据导到 sql server

    方法一: navicate:用法比较简单,选择工具-数据传输就可以了.目前测试了下暂时没遇到什么问题. 方法二: Microsoft SQL Server Migration Assistant 8. ...

  4. python 搜集参数

    def print_params(*params): print(params) print_params('Testing')print_params(1,2,3) #参数前的星号将所有值放置在同一 ...

  5. cocos2dx for lua 摄像机移动

    在cocos2dx中,我们想通过移动摄像机来做一些特殊处理,比如将摄像机聚焦在某个物体上,或者摄像机颤抖,摄像机原理观察sprite回收状况等等, 都需要通过相机移动来使用. cocos2dx中的摄像 ...

  6. Python学习记录4(语句)

    赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...

  7. IntelliJ IDEA 配置 Tomcat 运行web项目

    运行前提: 配置好 Java 的运行环境 配置好 Tomcat 安装 IntelliJ IDEA 开始 1.创建项目并配置 关于配置SDK,等建完项目再说 没有配置SDK的话 会出现下面的弹框,点击 ...

  8. HTTP-常用配置

    前言 这篇主要介绍HTTP服务程序环境 可能有一些介绍不到,博主能力有限,欢迎大神来纠正改进 HTTP协议从http/0.9到如今的http/2.0中间发生了很大的改变,现在主流的事http/1.1 ...

  9. H5(一)H5与HTML、XHTML的不同

    一.基本概念 html:超文本标记语言 (Hyper Text Markup Language) xhtml:可扩展超文本标记语言,是一种置标语言,表现方式与超文本标记语言(HTML)类似,不过语法上 ...

  10. selenium+phantomjs爬取bilibili

    selenium+phantomjs爬取bilibili 首先我们要下载phantomjs 你可以到 http://phantomjs.org/download.html 这里去下载 下载完之后解压到 ...