SGU 150.Mr. Beetle II
非常烦人的题,思路比较简单,十分容易出错,细节非常重要。
从四个不同的行走方向讨论经过的每一个格子。
code:
#include <iostream>
#include <utility>
#include <cmath>
using namespace std;
#define lb long double
#define fi first
#define se second
pair<int , int > a, b;
int n, tot;
const lb eps = 1e-10;
int floor2 (lb x)
{
if (ceil (x) - x < eps) return ceil (x);
return floor (x);
}
int ceil2 (lb x)
{
if (x - floor (x) < eps) return floor (x);
return ceil (x);
}
int main() {
cin >> a.fi >> a.se >> b.fi >> b.se >> n;
if (a.fi == b.fi || a.se == b.se) cout << "no solution";
else {
lb x = a.fi, y = a.se, lx = a.fi, ly = a.se;
lb k = ( (lb) b.se - (lb) a.se) / ( (lb) b.fi - (lb) a.fi);
//↗方向
if (a.fi < b.fi && a.se < b.se) {
while (fabs (x - b.fi) > eps && fabs (y - b.se) > eps) {
lb dtx = min ( (floor2 (y) + 1 - y) / k, floor2 (x) + 1 - x);
x += dtx, y += dtx * k;
tot++;
if (tot == n) break;
lx = x, ly = y;
}
}
//↙方向
else if (a.fi > b.fi && a.se > b.se) {
while (fabs (x - b.fi) > eps && fabs (y - b.se) > eps) {
lb dtx = min ( (y - ceil2 (y) + 1 ) / k, x - ceil2 (x) + 1 );
x -= dtx, y -= dtx * k;
tot++;
if (tot == n) break;
lx = x, ly = y;
}
}
//↘方向
else if (a.fi < b.fi && a.se > b.se) {
while (fabs (x - b.fi) > eps && fabs (y - b.se) > eps) {
lb dtx = min ( (ceil2 (y) - 1 - y) / k, floor2 (x) + 1 - x);
x += dtx, y += dtx * k;
tot++;
if (tot == n) break;
lx = x, ly = y;
}
}
//↖方向
else if (a.fi > b.fi && a.se < b.se) {
while (fabs (x - b.fi) > eps && fabs (y - b.se) > eps) {
lb dtx = min ( (y - floor2 (y) - 1 ) / k, x - ceil2 (x) + 1);
x -= dtx, y -= dtx * k;
tot++;
if (tot == n) break;
lx = x, ly = y;
}
}
if (tot < n) cout << "no solution";
else
cout << floor2 ( (lx + x) / 2) << ' ' << floor2 ( (ly + y) / 2);
}
return 0;
}
SGU 150.Mr. Beetle II的更多相关文章
- SGU 分类
http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...
- 使用Flexible适配移动端html页面 - demo记录
前段时间看了大神的博客文章[使用Flexible实现手淘H5页面的终端适配](地址:http://www.w3cplus.com/mobile/lib-flexible-for-html5-layou ...
- 笔记本电脑处理器(CPU)性能排行榜
笔记本电脑处理器(CPU)性能排行榜 本排行榜随新款处理器(CPU)的发布而随时更新.更新日期:2012年7月15日 排名 型号 二级+三级缓存 前端总线(MHz) 功率(瓦) 主频(MHz) 核 ...
- 构造 - SGU 109 Magic of David Copperfield II
Magic of David Copperfield II Problem's Link Mean: 略 analyse: 若i+j为奇数则称(i,j)为奇格,否则称(i+j)为偶格,显然每一次报数后 ...
- Lintcode 150.买卖股票的最佳时机 II
------------------------------------------------------------ 卧槽竟然连题意都没看懂,百度了才明白题目在说啥....我好方啊....o(╯□ ...
- sgu 109 Magic of David Copperfield II
这个题意一开始没弄明白,后来看的题解才知道这道题是怎么回事,这道题要是自己想难度很大…… 你一开始位于(1,1)这个点,你可以走k步,n <= k < 300,由于你是随机的走的, 所以你 ...
- sgu 108 Self-numbers II
这道题难在 hash 上, 求出答案很简单, 关键是我们如何标记, 由于 某个数变换后最多比原数多63 所以我们只需开一个63的bool数组就可以了! 同时注意一下, 可能会有相同的询问. 我为了防止 ...
- 150. Best Time to Buy and Sell Stock II【medium】
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- SGU Volume 1
SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...
随机推荐
- 【转】XCode、Cocoa、Objective-C 的关系区别
原文网址:http://blog.sina.com.cn/s/blog_5e89e1ff0100z4k1.html Object-Ciphone开发用的编程语言不是c,c++,java 而是objec ...
- 【转】patch命令
原文网址:http://bbs.chinaunix.net/thread-1945698-1-1.html patch给文件1应用补丁文件变成另外一个文件2(需要先用"diff 文件1 文件 ...
- (转载)mysql中limit用法
(转载)http://hi.baidu.com/sppeivan/item/e45179375d6778c62f8ec221 mysql中limit用法 使用查询语句的时候,经常要返回前几条或者中 ...
- 笔记-人老了-github
其实GITHUB是很不错的,虽然之前的JD泄露那件事情,后果很严重. 但是作为个人使用很不错的. github使用入门: 1:申请一个帐号 2:github使用ssh推送的.(ssh走的是加密) 所以 ...
- smtp服务器搭建(实现本地通讯)
1安装postfix 1)下载安装包 sudo apt-get install postfix 2)配置服务器 选择确定. 选择IneternetSite(通过SMTP发送和接收邮件),然后确定 ...
- Shell上传文件到ftp
写一个shell文件,将给定的文件上传到指定的ftp. 代码如下: #!/bin/bash #用来将文件上传到ftp,输入参数:文件名(包括路径).ftp的IP.ftp的端口.用户名.密码 ip=$ ...
- 没有找到 mspdb100.dll 的解决办法
直接从Common7\IDE\下复制这个文件到VC\Bin\下即可解决.(D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE)
- 385. Mini Parser
括号题一般都是stack.. 一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力. 后来猛然发现其实可以直接吧Neste ...
- SpringMVC存取Session的两种方法 转
方法一:使用servlet-api @Controller public class ManagerController { @Resource private ManagerService mana ...
- [置顶] Array ArrayList LinkList的区别剖析
这是一个面试中我们经常被问到的问题 Array.ArrayList.LinkList之间的区别:Array.ArrayList.LinkList均属于泛型的范畴,都用来存放元素,主要区别是Array是 ...