【数学】礼物(jzoj 2129)
礼物
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)相关推荐
- JZOJ 4.22 2129——【2017.4.21普及】礼物
题目描述 圣诞节这天,某商店准备了N个礼品盒,分别用整数1-N进行编号.其中,编号为1的盒子中有一个糖果,编号为2的盒子中有2个糖果,...编号为N的盒子中有N个糖果.这天一早,中山幼儿园的K个小朋友 ...
- 《剑指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次 语法糖 俗话说得好,有 ...
- 极客时间程序员的数学基础课_针对程序员和极客的10个很棒的礼物创意
极客时间程序员的数学基础课 假期给程序员朋友和家人的一些礼物提示以及购买链接. 照片由freestocks.org在Unsplash上拍摄 大家好,又是一年中的某个时候,我们喜欢与家人和朋友共度时光, ...
- 【数学】数列(jzoj 2752)
数列 jzoj 2752 题目大意: 给你一个正整数n(有多组数据),让你把它分为一个连续的正整数列之和(长度大于1),然你求着个数列最短的长度,如果这个序列不存在,那输出-1 输入样例 9 2 输出 ...
- 【数学】异或(jzoj 2298)
异或 jzoj 2298 题目大意: 定义nbnbnb数对a,ba,ba,b为gcd(a,b)=abgcd(a,b)=a^bgcd(a,b)=ab的数对,问不大于nnn的nbnbnb数对有多少对 输入 ...
- HDOJ题目1290献给杭电五十周年校庆的礼物(数学,递推)
献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- jzoj数列【数学】【模拟】
>Description 给定一个等差数列,第一项是a, 从第二项开始,每项与前一项的差都是一个定值b.如果用数学形式来表示,那么可以表示成 a + b × x , 其中 x≧0,且是整数.例如 ...
- 【数学】奶牛编号(jzoj 2932)
奶牛编号 jozj 2932 题目大意 求出有m个1的01串中字典序第n大的字典序 输入样例 7 3 输出样例 10110 数据范围 1⩽M⩽101 \leqslant M \leqslant 101 ...
- 数学 HDU 1290 献给杭电五十周年校庆的礼物
原题:请看这里 思路:当有n-1个平面时,分割的空间数为f(n-1). 要有最多的空间数,则第n个平面需与前n-1个平面相交,且不能有共同的交线,即最多有n-1 条交线. 而这n-1条交线把第n个平面 ...
最新文章
- 自制CSDN博客评论邮件提醒
- Python反爬机制介绍
- jvm一个线程的成本
- Python__模拟实现一个ATM+购物商城程序
- 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
- STM32位带操作实现过程解析
- 读保护_混合ASIL系统中不同安全等级模块间的边界保护
- java做航空购票系统_基于JAVA的航空订票系统
- Kafka在Linux下载安装及部署
- 数据库设计-简化字典表
- 如何进行网站挂马检测?怎样清除挂马?
- HMM和Viterbi算法
- 赤子城科技三年两变:音视频社交成主力军,营收结构稳定性存疑
- 7E3 Banding
- iphone两个备份合并_iphone数据如何备份?两大iPhone备份方法详解
- Python小鸟管道游戏源代码及素材
- 好用的电视盒子软件推荐:无广告看电视我选这两款
- 动态代理—IOC框架
- matplotlib可视化初相识
- 解决SVN清理失败问题
热门文章
- 热力地图高德_高德地图:最新动态
- linux下rip服务启动失败,RIP协议_linux系统管理与服务的技术博客_51CTO博客
- 求关系模式r的所有候选码_2_1关系数据库的基本概念
- leetcode 904:水果成篮(滑动窗口)
- JS中this的应用场景,再了解下apply、call和bind!
- oracle计算最大与最小之间数,oracle 分析函数
- java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园
- 蓝桥杯2017初赛-k倍区间-前缀和
- 汉诺塔 X HDU - 2511
- 数据结构与算法--力扣108题将有序数组转换为二叉搜索树