题目原址

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的更多相关文章

  1. Milliard Vasya's Function-Ural1353动态规划

    Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning mathematician. He decided to make ...

  2. CF460 A. Vasya and Socks

    A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  3. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  4. 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 ...

  5. 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 ...

  6. codeforces 676C C. Vasya and String(二分)

    题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...

  7. Where is Vasya?

    Where is Vasya? Vasya stands in line with number of people p (including Vasya), but he doesn't know ...

  8. 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 ...

  9. 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 ...

  10. 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/ ...

随机推荐

  1. Nodejs事件监听模块

    nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露 ...

  2. Oracle数据库几种启动方式及查询当前状态

    Oracle数据库几种启动方式 1.startup nomount: 非安装启动,这种方式下启动可执行:重建控制文件.重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程 ...

  3. WPF中TreeView单击展开其子元素以及点击一个元素展开其他元素收起

    TreeView单击展开其子元素: 在WPF的TreeView控件中,要想展开它的子元素,我们必须要鼠标左键点两下或者右键点一下,那么我们怎样实现左键点一下就使它展开呢? Xaml: <Grid ...

  4. python 添加 threadpool

    操作系统: Ubuntu 10.04 python安装依赖的软件包: python 出现 ImportError: No module named ** 我这里出现了: ImportError: No ...

  5. Java-笔记1

    /* 对第一个java程序进行总结 1. java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编 ...

  6. js图片库 案例

    事件处理函数:事件处理函数的作用是,在特定事件发生时调用特定的JavaScript代码.本例中想要在用户点击某个链接的时候触发一个动作,所以需要使用onclick事件处理函数. 添加事件处理函数的语法 ...

  7. 《阿里巴巴Java开发手册》阅读笔记

    1.抽象类命名使用 Abstract 或 Base 开头: 异常类命名使用 Exception 结尾: 测试类命名以它要测试的类的名称开始,以 Test 结尾. 2.POJO 类中布尔类型的变量,都不 ...

  8. 【期望dp 质因数分解】cf1139D. Steps to One

    有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...

  9. python错误处理之try...except...finally...错误处理机制。

    今天学习了python的错误处理. 在程序处理的过程中,经常会出现错误,一旦出错就会非常麻烦.所以有的高级语言通常都内置了一套  try...exept...finaly...的错误处理机制,pyth ...

  10. java的有用基础知识(2013-05-02-bd 写的日志迁移

    JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库.是java开发工具包 jre是java的运行环境(如果不做开发就不用安装jdk单独安装jre就可以运行java程序 ...