Codeforces Round #501 (Div. 3) 1015D Walking Between Houses
2 seconds
256 megabytes
standard input
standard output
There are nn houses in a row. They are numbered from 11 to nn in order from left to right. Initially you are in the house 11 .
You have to perform kk moves to other house. In one move you go from your current house to some other house. You can't stay where you are (i.e., in each move the new house differs from the current house). If you go from the house xx to the house yy , the total distance you walked increases by |x−y||x−y| units of distance, where |a||a| is the absolute value of aa . It is possible to visit the same house multiple times (but you can't visit the same house in sequence).
Your goal is to walk exactly ss units of distance in total.
If it is impossible, print "NO". Otherwise print "YES" and any of the ways to do that. Remember that you should do exactly kk moves.
The first line of the input contains three integers nn , kk , ss (2≤n≤1092≤n≤109 , 1≤k≤2⋅1051≤k≤2⋅105 , 1≤s≤10181≤s≤1018 ) — the number of houses, the number of moves and the total distance you want to walk.
If you cannot perform kk moves with total walking distance equal to ss , print "NO".
Otherwise print "YES" on the first line and then print exactly kk integers hihi (1≤hi≤n1≤hi≤n ) on the second line, where hihi is the house you visit on the ii -th move.
For each jj from 11 to k−1k−1 the following condition should be satisfied: hj≠hj+1hj≠hj+1 . Also h1≠1h1≠1 should be satisfied.
10 2 15
YES
10 4
10 9 45
YES
10 1 10 1 2 1 2 1 6
10 9 81
YES
10 1 10 1 10 1 10 1 10
10 9 82
NO
题目大意:1~n个房子,起点为1,然后规定刚好k步,走完s的距离,(从x到y,距离为|x-y|).
思路:以为是个深搜。但是感觉写不了。。。看了官方题解。(蠢了)。左右走无法判断。
官方给了 cur + x 和 cur - x 来左右走。怎么保证刚好k步s距离呢。 s-(k-1)
如果s-(k-1) > (n-1) 走最大的距离,然后k -= 1, s -= l; (l为他俩的最小值)
当k等于1,剩最后s',就保证刚好走完s。k != 1, 总还会剩一点。比较巧妙
不能刚好k步走完s,当且仅当 k > s or k*(n-1) < s
能继续走,当且仅当 k-1 <= s-x x <= n-1 也就是min(n-1, s-(k-1));
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <sstream>
#include <stack>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f; ll step(ll cur, ll x) {
if(cur - x > )//能左走就先左走
return cur - x;
else//不行就右走
return cur + x;
} int main() {
//freopen("in.txt", "r", stdin);
ll n, k, s, cur = ;
scanf("%lld%lld%lld", &n, &k, &s);
if(k > s || k*(n-) < s) {//只有这两种情况NO
printf("NO\n");
return ;
}
printf("YES\n");
while(k > ) {//先走最大的,直到最后不足最大的,然后一点点走。
ll l = n- < s-(k-) ? n- : s-(k-);// s-(k-1)能保证k步刚好s距离
cur = step(cur, l);//左走还是右走
printf("%lld ", cur);
s -= l;
k -= ;
}
}
Codeforces Round #501 (Div. 3) 1015D Walking Between Houses的更多相关文章
- 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 ...
- Codeforces Round #501 (Div. 3) D. Walking Between Houses (思维,构造)
题意:一共有\(n\)个房子,你需要访问\(k\)次,每次访问的距离是\(|x-y|\),每次都不能停留,问是否能使访问的总距离为\(s\),若能,输出\(YES\)和每次访问的房屋,反正输出\(NO ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- Codeforces Round #501 (Div. 3)
A - Points in Segments 题意:implement #include<bits/stdc++.h> using namespace std; typedef long ...
- Codeforces Round #501 (Div. 3) 1015A Points in Segments (前缀和)
A. Points in Segments time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 【Codeforces Round #501 (Div. 3)】
A:https://www.cnblogs.com/myx12345/p/9842904.html B:https://www.cnblogs.com/myx12345/p/9842964.html ...
- Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
题意:有两个字符串\(S\)和\(T\),判断\(T\)是否能由\(S\)通过交换某位置的相邻字符得到,如果满足,输出交换次数及每次交换的位置,否则输出\(-1\). 题解:首先判断不满足的情况,只有 ...
- Codeforces Round #552 (Div. 3) 题解
Codeforces Round #552 (Div. 3) 题目链接 A. Restoring Three Numbers 给出 \(a+b\),\(b+c\),\(a+c\) 以及 \(a+b+c ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- java try中包含return语句,finally中的return语句返回顺序
//结论: finally 中的代码比 return 和 break 语句后执行 public static void main(String[] args) { int x=new Test.tes ...
- Skype SILK vs. iLBC vs. Speex
对比一下这三种VOIP语音算法的特点: 1 参数与特征 2 SILK性能 关于iLBC和Speex的性能可以参考以前写的文章. 3 关于VOIP一些观点(仅代表个人观点) 1) Skype 辛苦三年 ...
- [SHOI2017]期末考试
题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布. 第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最 ...
- 系统原生文件MD5值获取
windows: certutil -hashfile filePath MD5 certutil -hashfile filePath SHA1 Linux md5sum filePath s ...
- SciTE for Ruby的配置
转自:http://my.oschina.net/xsinger/blog/14229?catalog=71266 下载下面这个文件:http://scintilla.sourceforge.net/ ...
- uboot启动参数设置分类及方法
一.nfs启动内核与根文件系统,内核与根文件系统都在nfs上 bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman ...
- docker出现错误 could not read CA certificate
1. 问题描述 $ docker login # 无法正常使用 其他一堆命令,显示验证失败之类的问题 2. 解决方案 $ unset DOCKER_TLS_VERIFY $ unset DOCKER_ ...
- 数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)
http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Da ...
- linux日常管理-防火墙netfilter工具-iptables-2
分别是包的数量:26 包的字节:1320 处理方式 tcp协议 opt in out 源ip 目标ip 到80端口的行为. 处理行为处理有REJECT外 还有DROP ACCEPT.分别是看一 ...
- ES6之箭头函数中的this
在讲箭头函数中的this之前我们先介绍一下普通函数中的this. 普通函数中的this: (1)this指向它的直接调用者 (2)默认的,非严格模式下,没找到直接调用者则指向window ( ...