礼物

jzoj 2129

题目大意

有1……n,n个礼物盒,第i个礼物盒有i个礼物,现在让你选2个礼物盒,使他是k的倍数

输入样例

1 1
3 2
5 2
50 50
0 0

输出样例

0
1
4
24

数据范围

20%的数据N<=100;
80%的数据K<=1000;
每个输入文件最多有200行输入数据。

解题思路:

对于20%的数据,我们可以直接暴力
对于80%的数据,我们可以按%k得到的值来分类,如果两个数%剩的值加在一起等于k那说明这两个数是合法的一对
正解:
首先我们图文结合(如下图)
首先我们把nnn按kkk来分(第2步)
然后我们把n/kn/kn/k定为xxx
每一个k中都有一个被整除的(第3步右侧),那x个被整除的,可以组成(x−1)∗x2\frac{(x-1)*x}{2}2(x−1)∗x​对
然后剩下的k−1k-1k−1我们分为奇偶数(第4步)
奇数:把中间除外的互相相乘,得到h∗x∗xh*x*xh∗x∗x对(h为一半,每个余数都有x个数,两个就有x∗xx*xx∗x对),然后剩下的一个(第5步)和其他k中的中间相乘,得到(x−1)∗x2\frac{(x-1)*x}{2}2(x−1)∗x​对
偶数:直接相乘
然后处理余数:
不到一半或在一般前面的部分就直接和另一侧的x个数相配(第6步)
如果有中间1块就和前面xxx个中间1块相配(第8步)
大于一半的就和一半前的x+1x+1x+1相配(+1是因为第6步使一半前的加上了1)
注:解题思路写地不好请见谅

代码:

#include<cstdio>
#define min(a,b) (a)<(b)?(a):(b)
using namespace std;
long long n,k,x,ys,h,ans;
int main()
{scanf("%lld %lld",&n,&k);while (n&&k){x=n/k;//如解题思路ys=n%k;//余数h=(k-1)/2;//减去整除部分后的一半ans=x*(x-1)/2+x*x*h;//整除部分和普通部分if ((k-1)%2) ans+=x*(x-1)/2;//奇数的中间部分if (ys>0) ans+=(min(ys,h))*x,ys-=h;//余数的左边部分if (ys>0&&(k-1)%2) ans+=x,ys--;//奇余数的中间部分if (ys>0) ans+=ys*(x+1);//余数的右边部分printf("%lld\n",ans);scanf("%lld %lld",&n,&k);}return 0;
}

【数学】礼物(jzoj 2129)相关推荐

  1. JZOJ 4.22 2129——【2017.4.21普及】礼物

    题目描述 圣诞节这天,某商店准备了N个礼品盒,分别用整数1-N进行编号.其中,编号为1的盒子中有一个糖果,编号为2的盒子中有2个糖果,...编号为N的盒子中有N个糖果.这天一早,中山幼儿园的K个小朋友 ...

  2. 《剑指offer》394244、数学类三则:1-n中1出现的个数、最大的礼物、丑数

    1到n中1出现的个数 offer39的要求是,求1-n的整数中1出现的次数,比如input25,那么1在1,10-19,21中出现了1+1+10+1(11出现了两个1)=13次 语法糖 俗话说得好,有 ...

  3. 极客时间程序员的数学基础课_针对程序员和极客的10个很棒的礼物创意

    极客时间程序员的数学基础课 假期给程序员朋友和家人的一些礼物提示以及购买链接. 照片由freestocks.org在Unsplash上拍摄 大家好,又是一年中的某个时候,我们喜欢与家人和朋友共度时光, ...

  4. 【数学】数列(jzoj 2752)

    数列 jzoj 2752 题目大意: 给你一个正整数n(有多组数据),让你把它分为一个连续的正整数列之和(长度大于1),然你求着个数列最短的长度,如果这个序列不存在,那输出-1 输入样例 9 2 输出 ...

  5. 【数学】异或(jzoj 2298)

    异或 jzoj 2298 题目大意: 定义nbnbnb数对a,ba,ba,b为gcd(a,b)=abgcd(a,b)=a^bgcd(a,b)=ab的数对,问不大于nnn的nbnbnb数对有多少对 输入 ...

  6. HDOJ题目1290献给杭电五十周年校庆的礼物(数学,递推)

    献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. jzoj数列【数学】【模拟】

    >Description 给定一个等差数列,第一项是a, 从第二项开始,每项与前一项的差都是一个定值b.如果用数学形式来表示,那么可以表示成 a + b × x , 其中 x≧0,且是整数.例如 ...

  8. 【数学】奶牛编号(jzoj 2932)

    奶牛编号 jozj 2932 题目大意 求出有m个1的01串中字典序第n大的字典序 输入样例 7 3 输出样例 10110 数据范围 1⩽M⩽101 \leqslant M \leqslant 101 ...

  9. 数学 HDU 1290 献给杭电五十周年校庆的礼物

    原题:请看这里 思路:当有n-1个平面时,分割的空间数为f(n-1). 要有最多的空间数,则第n个平面需与前n-1个平面相交,且不能有共同的交线,即最多有n-1 条交线. 而这n-1条交线把第n个平面 ...

最新文章

  1. 自制CSDN博客评论邮件提醒
  2. Python反爬机制介绍
  3. jvm一个线程的成本
  4. Python__模拟实现一个ATM+购物商城程序
  5. 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
  6. STM32位带操作实现过程解析
  7. 读保护_混合ASIL系统中不同安全等级模块间的边界保护
  8. java做航空购票系统_基于JAVA的航空订票系统
  9. Kafka在Linux下载安装及部署
  10. 数据库设计-简化字典表
  11. 如何进行网站挂马检测?怎样清除挂马?
  12. HMM和Viterbi算法
  13. 赤子城科技三年两变:音视频社交成主力军,营收结构稳定性存疑
  14. 7E3 Banding
  15. iphone两个备份合并_iphone数据如何备份?两大iPhone备份方法详解
  16. Python小鸟管道游戏源代码及素材
  17. 好用的电视盒子软件推荐:无广告看电视我选这两款
  18. 动态代理—IOC框架
  19. matplotlib可视化初相识
  20. 解决SVN清理失败问题

热门文章

  1. 热力地图高德_高德地图:最新动态
  2. linux下rip服务启动失败,RIP协议_linux系统管理与服务的技术博客_51CTO博客
  3. 求关系模式r的所有候选码_2_1关系数据库的基本概念
  4. leetcode 904:水果成篮(滑动窗口)
  5. JS中this的应用场景,再了解下apply、call和bind!
  6. oracle计算最大与最小之间数,oracle 分析函数
  7. java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园
  8. 蓝桥杯2017初赛-k倍区间-前缀和
  9. 汉诺塔 X HDU - 2511
  10. 数据结构与算法--力扣108题将有序数组转换为二叉搜索树