题解:CF1015D Walking Between Houses

算法

模拟,分类讨论

分析

首先,设每步走的距离为 \(t_i\),我们发现 \(t_i\) 应是满足 \(1\le t_i\le n-1\) 的。那么就很容易推出 NO 的情况:

  • 当 \(s<k\) 时,由于每一步都要至少走一个单位,所以 \(k\) 次步数肯定用不完,而题目要求恰好 \(k\) 次;
  • 当 \(\frac{s}{k}>n-1\) 时,此时我们把每一步都撑到了最大的距离也就是 \(n-1\) 个单位,但仍不满足要求,所以判负。

判完 NO 后,余下的就都是 YES 的情况,考虑怎么构造方案。

  • 如果 \(k\mid s\),容易想到一种构造方案为 \(\frac{s}{k},1,\frac{s}{k},…,1,\frac{s}{k}(,1)\)。

  • 如果 \(k\nmid s\),说明 \(s\div k\) 存在余数,那我们以上一种情况的方式处理后将余数加上即可。为了方便处理,我采用了上取整再将多走的距离减去的方法。这时多走的距离就是 \(\left\lceil\dfrac{s}{k}\right\rceil\times k-s\)。注意,在中间的某处减去一个单位的距离相当于少走了两个单位的距离(如 \(1,3,1\) 变为 \(1,2,1\)),那么在余数为奇数时,将中间的减完后会剩 \(1\),我们需要在结尾处理,此时需分类讨论。

    1. 当 \(k\) 为偶数时,原本 \(k\) 回到开头 \(1\),但因为我们处理剩下多走了 \(1\) 个单位的距离,所以我们少走一个应回到 \(2\)。
    2. 当 \(k\) 为奇数时,原本 \(k\) 会走到后面的 \(\frac{s}{k}\) 处,但因为我们多走了 \(1\) 个单位,所以我们将结尾走到的位置减 \(1\)。

最终输出答案即可,注意要开 long long,不然会 Wrong answer on test 8

示例代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace Ryan
{
const int N=2e5+5;
vector<int> v;
int n,k,s;
signed work()
{
cin>>n>>k>>s;
if(k>s||s*1.0/k>(n-1))
{
cout<<"NO"<<endl;
return 0;
}
for(int i=1;i<=k;i++)
{
if(i&1)
v.push_back(ceil(s*1.0/k)+1);
else
v.push_back(1);
}
if(s%k)
{
int ss=ceil(s*1.0/k)*k-s;
// cout<<ss<<"**\n";
for(int i=1;i<=k&&ss-2>=0;i+=2)
{
ss-=2;
v[i-1]--;
}
if(ss)
{
if(k&1)
v[k-1]-=1;
else
v[k-1]+=1;
}
}
cout<<"YES"<<endl;
for(auto it:v)
cout<<it<<" ";
return 0;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return Ryan::work();
}

题解:CF1015D Walking Between Houses的更多相关文章

  1. Codeforces Round #501 (Div. 3) 1015D Walking Between Houses

    D. Walking Between Houses time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  2. Walking Between Houses(贪心+思维)

    Walking Between Houses There are nn houses in a row. They are numbered from 11 to nn in order from l ...

  3. 【CF1015D】Walking Between Houses(构造,贪心)

    题意:从1开始走,最多走到n,走k步,总长度为n,不能停留在原地,不能走出1-n,问是否有一组方案,若有则输出 n<=1e9,k<=2e5,s<=1e18 思路:无解的情况分为两种: ...

  4. CodeForces - 1015 D.Walking Between Houses

    Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...

  5. Codeforces Round #501 (Div. 3) D. Walking Between Houses (思维,构造)

    题意:一共有\(n\)个房子,你需要访问\(k\)次,每次访问的距离是\(|x-y|\),每次都不能停留,问是否能使访问的总距离为\(s\),若能,输出\(YES\)和每次访问的房屋,反正输出\(NO ...

  6. Codeforces Round #501 (Div. 3) D. Walking Between Houses

    题目链接 题意:给你三个数n,k,sn,k,sn,k,s,让你构造一个长度为k的数列,使得相邻两项差值的绝对值之和为sss, ∑i=1n∣a[i]−a[i−1]∣,a[0]=1\sum_{i=1}^n ...

  7. CF D. Walking Between Houses (贪心)

    题意: 现在有n个房子排成一列,编号为1~n,起初你在第1个房子里,现在你要进行k次移动,每次移动一都可以从一个房子i移动到另外一个其他的房子j里(i != j),移动的距离为|j - i|.问你进过 ...

  8. Codeforces Div3 #501 A-E(2) F以后补

    感觉自己有点强迫症  不都写出来就找理由不写题解 http://codeforces.com/contest/1015   题目链接 A. Points in Segments 题目意思  n个线段  ...

  9. Codeforces Round #501 (Div. 3)

    A - Points in Segments 题意:implement #include<bits/stdc++.h> using namespace std; typedef long ...

  10. 【题解】poj 3162 Walking Race 树形dp

    题目描述 Walking RaceTime Limit: 10000MS Memory Limit: 131072KTotal Submissions: 4941 Accepted: 1252Case ...

随机推荐

  1. 在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

    FreeRADIUS 为AAA Radius Linux下开源解决方案,DaloRadius为图形化web管理工具. freeradius一般用来进行账户认证管理,记账管理,常见的电信运营商的宽带账户 ...

  2. C# 使用正则表达式 将金额转换为中文大写

    /// <summary> /// decimal转换成中文大写 /// </summary> /// <param name="number"> ...

  3. Linux 扩展磁盘分区

    之前安装 Ubuntu 虚拟机时使用的都是默认配置,虚拟机硬盘分配了 60 GB.后来想要扩容,特此记录一下扩容过程. 在操作前请做好备份 首先在 VMware 中修改虚拟硬盘大小. 然后进入虚拟机, ...

  4. “java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag”解决方法

    在运行jsp项目的时候出现了这个java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag报错,一直尝试更换jar文件等也没 ...

  5. 解决elementUI 表格el-table设置高度之后合计行不显示

    问题:elementUI el-table 设置了高度height 和合计行 show-summary 之后,合计行无法正常显示 一.问题分析 根据调试,发现该问题应该属于组件bug,表格主体中给 f ...

  6. SqlEs-像使用数据库一样使用Elasticsearch

    SqlEs SqlEs是Elasticsearch的客户端JDBC驱动程序,支持采用sql语法操作Elasticsearch.SqlEs构建在RestHighLevelClient,屏蔽了RestHi ...

  7. USB总线-Linux内核USB3.0主机控制器驱动初始化流程分析(十三)

    1.概述 RK3588有2个USB3.0 DRD控制器,2个USB2.0 Host控制器.USB3.0 DRD控制器既可以做Host,也可以做Device,向下兼容USB2.0和USB1.0.USB3 ...

  8. iOS生成ipa包的时候总是弹窗提示macOS想要使用系统钥匙串

    最近新换了一台苹果电脑,性能不错,不过证书和描述文件需要重新配置,遇到了一系列奇怪的问题.在这里整理记录下来,希望能给其他人提供一些帮助.iOS生成ipa包的时候总是弹窗提示[macOS想要使用系统钥 ...

  9. C++第五节课 函数默认值 函数重载

    #include <iostream> using namespace std; // C++的函数默认值和函数重载 // 函数参数的入栈规则从右往左开始入栈 // 函数重载机制(第一种静 ...

  10. 自签openssl证书(包含泛域名)

    1.安装openSSL weget http://www.openssl.org/source/openssl-1.0.0a.tar.gz Tar -zxvf openssl-1.0.0a.tar.g ...