A. Vasya and Book
题目原址
http://codeforces.com/contest/1082/problem/A
题目内容
一共n页书,现在位于第x位,想要看第y页,每次只能翻d页,注意总能翻到第1页和第n页。
Vasya想知道自己能否在经过无数次翻书后 看到第y页的内容。
如果可以,请给出最少需要翻几次书。
题目解析
类似一个模除的问题。
首先思考无法翻到第y页的情况,即:
①直接翻翻不到
②在到达第1页和第n页后也翻不到
对应的式子引出的是:
直接翻不到:
abs(y - x) % d != ;
第1页翻不到:
abs(y - ) % d !=
第n页翻不到:
abs(n - y) % d !=
因此翻不到的情况很好判断。注:以下简记 左不通 和 右不通 分别代表第一页翻不到和第n页翻不到。
再看最小翻阅次数,这里可以详尽的判断所有情况,也可以统一完成,本人采用的是详尽的判断。
将所有可能性列举出来,即左不通而右通,那么最短翻阅只有右侧的一种方式。
对应的代码部分为:
if(abs(y - ) % d != ){ //左侧不通
//int temp = need(x, y, d);
if(abs(n - y) % d != ){ //右侧不通
puts("-1");
continue;
}
else {
count += need(x, n, d);
count += need(n, y, d);
cout << count << endl;
continue;
}
}
其中,need()函数用来计算从x到y在每次翻阅d的情况下直接到达需要的翻阅次数,如下:
int need(int x, int y, int d){ //3 - 6 3
if(abs(y - x) % d == ){
return abs(y - x) / d;
}
else {
return abs(y - x) / d + ;
}
}
当右侧不通,而左侧通的时候,情况类似上述:
else if(abs(n - y) % d != ){ //右侧不通
//int temp = need(x, y, d);
count += need(x, , d);
count += need(, y, d);
cout << count << endl;
continue;
}
而当左右都可通过的时候,只需计算左右两种方式中翻阅数的最小者即可。
else{
int left = need(x, , d) + need(, y, d);
int right = need(x, n, d) + need(n, y, d);
count = min(left, right);
cout << count << endl;
continue;
}
题目也可以将不通返回正无穷,从而在返回最小值的过程中失效,减少判断。
题目总结
很简单的题目,没有考察到算法知识,只是考验编程者对于多种判断情况的处理。做题时应先想好思路再完成。
A. Vasya and Book的更多相关文章
- Milliard Vasya's Function-Ural1353动态规划
Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning mathematician. He decided to make ...
- CF460 A. Vasya and Socks
A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 递推DP URAL 1353 Milliard Vasya's Function
题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...
- Codeforces Round #281 (Div. 2) D. Vasya and Chess 水
D. Vasya and Chess time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分
C. Vasya and Basketball time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- codeforces 676C C. Vasya and String(二分)
题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...
- Where is Vasya?
Where is Vasya? Vasya stands in line with number of people p (including Vasya), but he doesn't know ...
- Codeforces Round #324 (Div. 2) C. Marina and Vasya 贪心
C. Marina and Vasya Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/pr ...
- Codeforces Round #322 (Div. 2) A. Vasya the Hipster 水题
A. Vasya the Hipster Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/p ...
- Codeforces Codeforces Round #319 (Div. 2) C. Vasya and Petya's Game 数学
C. Vasya and Petya's Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/ ...
随机推荐
- vue中动画的封装
<style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-active,.v-leave-active{ transition:opacit ...
- Java的感受
感觉Java很重要,但是学起来好像并不比C语言简单.
- P2082 区间覆盖(加强版)
题目 #include<iostream> #include<algorithm> #include<cstring> using namespace std; s ...
- 第10章 新建工程-库函数版—零死角玩转STM32-F429系列
第10章 新建工程—库函数版 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- youku服务端
文件结构 config import os IP_PORT = () BACKLOG = BASE_DIR = os.path.dirname(os.path.dirname(__file__)) B ...
- 1、SpringBoot------表单校验
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/1ef5e597a6f866e73387c0238dbcdf46cf ...
- angular2中一种换肤实现方案
思路:整体思路是准备多套不同主题的css样式.在anguar项目启动时,首先加载的index.html中先引入一套默认的样式.当我们页面有动作时再切换css. 可以通过url传参触发,也可以通过bu ...
- js复习,预编译
注意:函数声明整体提升.变量 声明提升 1.imply global 暗示全局变量:即任何变量,如果变量未声明就赋值,此变量就为全局对象所有 ==> eg: a = 122;==> e ...
- STL 之 set的应用
关于set Set是STL中的一个容器,特点是其中包含的元素值是唯一的,set根据其底层实现机制分为hash存储和红黑树存储两种方式,这两种结构最本质的区别就是有序和无序,红黑树的存储是有序的而has ...
- 汇编:1位16进制数到ASCII码转换
;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...