题解: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. 代码随想录Day22

    77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [ ...

  2. 关于对 Tomcat 进行小版本升级的快速解决方案

    1.背景描述 原来的 Tomcat 在部署时,使用的是最新的版本 9.0.40 . 经过一段时间后,在原来的 Tomcat 版本中,发现存在漏洞. 因此,需要将旧版本(9.0.40)升级到没有漏洞的新 ...

  3. 使用 iRingo 解锁本该属于你的苹果服务

    为什么别人的 Spotlight 可以通过航班号查询航班信息,而我的不行?为什么别人的 Spotlight 可以直接看英超联赛的比分信息?为什么我的 Apple News 打不开?这其实是因为这些功能 ...

  4. Ubuntu Server 部署 FRP 反向代理

    踩坑记录 我使用的配置文件是官方提供的示例配置文件 通过 SSH 访问内网机器,应该没有问题. 第一次我使用 Docker 镜像 snowdreamtech/frps 在服务器上部署 frps,发现始 ...

  5. 【Python】之pip安装报错问题:WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))

    我想安装python第三方库,但是始终报安装失败 经查询得知,需要国内源,有如下地址: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https: ...

  6. 用python编写web 界面可以用哪些库

    背景: 很多人熟悉python, 但不熟悉前端语言js, 为了项目快速落地,也不太想去专门学习 React/Angular/Vue这些框架,那么就会问一个问题,能不能用Python直接写出一个简单we ...

  7. 微前端实践MicroApp

    微前端实践 本文主要是关于microApp的实践过程记录 本文主要内容如下: 什么是MicroApp? MicroApp的父子通讯方式以及路由介绍 如何部署相关应用? 安装 npm i @micro- ...

  8. Angular 18+ 高级教程 – Component 组件 の Control Flow

    前言 Control Flow 是 Angular v17 版本后推出的新模板语法,用来取代 NgIf.NgForOf.NgSwitch 这 3 个 Structure Directive. Stru ...

  9. Google – Reviews

    前言 继上一篇 Facebook – Reviews (Graph API) 后, 这篇继续介绍另一个 Reviews 大平台 Google Reviews. 想通过 API 获取 Google Re ...

  10. JavaScript – 类型转换

    介绍 JS 是弱类型语言, 在编程时, 有许多自动类型转换的技巧, 虽然大家都不太鼓励, 尤其是用了 TypeScript 之后, 但无可否认自动转换很方便, 看上去也很干净. 所以这篇还是要介绍一些 ...