Codeforces Round #555 (Div. 3) D. N Problems During K Days 【数学思维】
一 题面
二 分析
对于这题,刚开始我就是陷入了对公式的执着,企图用公式直接确定第一个数,然后试着去找序列。经过思考和手动模拟后发现是很难保证正确性的。
对于这题,第一步是很明确的,就是确定第一个数,如果给定了$N$和$K$,那么第一个数是可以确定的。因为如果我们只保证后一个数比当前数多1,并且确定第一个数是1,那么可以根据$K$确定对应的最小和$sum$
$sum = \frac{K(K+1)}{2}$
这个公式应该比较基础。这样我们就可以把$N<sum$的情况就全部排除掉了。
接下来,分析确定的$K$和$N>=sum$的情况:
首先,可以确定一个公式
$N - sum = {K}\times{t} + res$ $res<K$
这个公式也比较基础。
有了这个公式后,就比较明了了,因为可以在$sum$的基础上把$t$个$K$平摊掉,就是对应的$K$个数每个数加1。
接下来处理$res$,这里可能需要动脑袋思考一下。但我们依然需要明确,第一个数是不可以改变的,因为第一个数改变了会直接影响后面的所有数。
处理$res$,我们可以直接从当前确定的数组从后往前进行加操作,操作的前提是满足题目给定的条件。加了之后会发现,如果当前的数加了一个数后,那么右边已经加过的数范围又变了,又可以加了,但是是有限度的,因为第一个数已经确定了。(这里也提醒了我们为什么不从左往右进行处理)
处理$res$的时候,如果出现了遍历一遍后,$res > 0$并且没有加数的情况,就表示数组已经无法满足题目给定的条件了,直接输出$NO$即可。
三 AC代码
#include <bits/stdc++.h> using namespace std;
#define LL long long
const int MAXN = 1e5 + ;
int N;
LL K;
int Data[MAXN]; int main()
{
ios::sync_with_stdio(false);
cin >> N >> K;
//第一个数为1的最基础的情况
LL sum = (K * (K + ) ) >> ;
if(sum > N)
{
cout << "NO" << endl;
return ;
}
N -= sum;
int res = N % K;
Data[] = + N/K;
for(int i = ; i <= K; i++)
Data[i] = Data[i - ] + ;
//满足最低要求后,还剩下res < k
while(res)
{
bool flag = true;
//第一个数一定不能变
for(int i = K; i > ; i--)
{
int tmp = (Data[i - ] << ) - Data[i];
if( res > && tmp > )
{
//数组中有数变化了
flag = false;
if(res >= tmp)
{
Data[i] += tmp;
res -= tmp;
}
else
{
Data[i] += res;
res = ;
}
}
}
if(flag)
{
cout << "NO" << endl;
return ;
}
}
cout << "YES" << endl;
for(int i = ; i < K; i++)
{
cout << Data[i] << " ";
}
cout << Data[K] << endl;
return ;
}
Codeforces Round #555 (Div. 3) D. N Problems During K Days 【数学思维】的更多相关文章
- Codeforce Round #555 Div.3 D - N Problems During K Days
构造题 话说挺水的题..当时怎么就WA到自闭呢.. 先把每个位置按照最低要求填满,也就是相差1..然后从最后一位开始把剩下的数加上,直到不能加为止. #include <bits/stdc++. ...
- Codeforces Round #539 (Div. 2) - D. Sasha and One More Name(思维)
Problem Codeforces Round #539 (Div. 2) - D. Sasha and One More Name Time Limit: 1000 mSec Problem ...
- 老年OIer的Python实践记—— Codeforces Round #555 (Div. 3) solution
对没错下面的代码全部是python 3(除了E的那个multiset) 题目链接:https://codeforces.com/contest/1157 A. Reachable Numbers 按位 ...
- Codeforces Round #555 (Div. 3)[1157]题解
不得不说这场div3是真的出的好,算得上是从我开始打开始最有趣的一场div3.因为自己的号全都蓝了,然后就把不经常打比赛的dreagonm的号借来打这场,然后...比赛结束rank11(帮dreago ...
- Codeforces Round #555 (Div. 3) c2 d e f
c2:Increasing Subsequence (hard version) 那边小取那边,然后相等比较后面的长度 #include<bits/stdc++.h> using name ...
- Codeforces Round #555 (Div. 3) 解题报告
A.Reachable Numbers 题意: 给定操作f(x):将x加1,删去得到的数的所有末尾0,如f(10099)=10099+1=10100→1010→101.现在给定一个数n,对n进行无限次 ...
- Codeforces Round #555 (Div. 3) AB
A: http://codeforces.com/contest/1157/problem/A 题意:每次加到10的整数倍之后,去掉后面的0,问最多有多少种可能. #include <io ...
- CodeForces Round #555 Div.3
A. Reachable Numbers 代码: #include <bits/stdc++.h> using namespace std; ; int N; set<int> ...
- Codeforces Round #555 (Div. 3) E. Minimum Array
题意:b数组可以自由排序,c[i]=(a[i]+b[i])%n. 题目中要求c数组的字典序是最小的.那么我们需要尽量满足前面的c[i],才能使字典序最小. 我们知道a[i]和b[i]都是[0,n-1] ...
随机推荐
- PHP 中 Traits 的简单使用
PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西. Traits可以理解 ...
- 本周MySQL官方verified/open的bug列表(11月8日至11月14日)
本周MySQL verified的bug列表(11月8日至11月14日) 1. Bug #70859-DWITH_EXAMPLE_STORAGE_ENGINE=1 is ignored URL ...
- rinetd小记
官网:http://www.boutell.com/rinetd/ 下载地址:http://www.boutell.com/rinetd/http/rinetd.tar.gz 编译安装: 对于Wind ...
- CentOS 新系统后配置
1. 网络配置 略 1.2 ip_froward 查看 sysctl -a | grep ip_ 修改 vi /etc/sysctl.conf net.ipv4.ip_forward = 1 最大使用 ...
- MSP430 G2553 计时/计数器 Timer_A
MSP430G2553包含了两个16-bit Timer_A计时/计数器.本文简单介绍了Timer_A的功能和寄存器使用,本文及后续的随笔部分参考了"Scientific Instrumen ...
- Javascript设计模式理论与实战:桥接模式
桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 基本理论 桥接模式定义 ...
- 配置ssh使用socks代理
ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' username@server
- .net core 自制错误日志
前言 之前.net framework用的ErrorLog帮助类,对于监控错误形成日志,内容非常清晰,想在.net core2.2中继续用,但是有很多不一样的地方,所以想总结一下. 首先需要HttpC ...
- windows下简单验证码识别——完美验证码识别系统
此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...
- 兼容性测试中如何切换和管理多个JDK版本
本文由作者邹珍珍授权网易云社区发布. 一.测试背景: 项目对外提供JAR包,需要测试该JAR包对不同JDK版本(1.6至1.9版本)的兼容性.下面主要介绍在兼容性测试中,JDK多版本共存时如何配置环境 ...