B - 三角形问题

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d
& %I64u

Description

给你一个由无穷个节点组成的三角形(如下图),你的任务很简单——任意给你两个正整数x和y,判断它们是否相邻(重合不是相邻)。

Input

第一行T,表示T组测试数据,接下来仅有两个32位正整数x 和y。

Output

对于每组测试数据,首先输出”Case k:”,其中k表示第几组。然后如果x和y相邻,则输出“Yes”,否则输出“No”。

Sample Input

31 11 21 11

Sample Output

Case 1:
No
Case 2:
Yes
Case 3:No

用 了一种很麻烦的方法做出来的,看规律又看不出,但发现在同一行中相邻则相差为一,如果不在同一行,设两个元素为a,b(a<b),则必有大小之分,细心点发现a所在行数加上a就是a左下的元素,a加上所在行数再加一就是a右下的元素,如4在第3行,4+3就是7,4+3+1就是8,故4与7、8相邻,所以,我们就可以求出a,b所在行数,然后执行以上判断,但如何高效地找到其所在行呢,我们可以将int以内的元素打表,呵呵,不要被吓到了,这里说的打表只是用二维数组第一维存放行数,第二维存放左边界值与右边界值,然后用二分查找行数即可;

思路基本就是这样,详细请看代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=60000+50;
int s[N][2];
int main()
{
int i,t,a,b;
s[1][1]=s[1][2]=1;
for(i=2; i<=N; i++)
{
s[i][1]=s[i-1][1]+i-1;
s[i][2]=s[i-1][2]+i;
}//二维数组将表打出(i代表行数)
// for(i=1;i<=N;i++)
// printf("%d %d %d\n",i,s[i][1],s[i][2]);
scanf("%d",&t);
int t1=t;
while(t--)
{
scanf("%d%d",&a,&b);
int f=0;
int l=1,r=N,mid1=(l+r)/2,mid2;
if(a==b)
f=1;
else
{
if(a>b) swap(a,b);
while(a<s[mid1][1]||a>s[mid1][2])//二分查找a所在行;
{
if(a>=s[mid1][1]&&a<=s[mid1][2])
break;
else if(a<s[mid1][1])
r=mid1-1;
else if(a>s[mid1][2])
l=mid1+1;
mid1=(l+r)/2;
}
l=1,r=N,mid2=(l+r)/2;
while(b<s[mid2][1]||b>s[mid2][2])<span style="font-family: Arial, Helvetica, sans-serif;">//二分查找a所在行;</span>
{
if(b>=s[mid2][1]&&b<=s[mid2][2])
break;
else if(b<s[mid2][1])
r=mid2-1;
else if(b>s[mid2][2])
l=mid2+1;
mid2=(l+r)/2;
}
if(mid1==mid2&&a+1==b)//同一行判断相差是否为1;
f=0;
else if(a+mid1==b||a+mid1+1==b)
f=0;
else
f=1;
}
if(f)
printf("Case %d:No\n",t1-t);
else
printf("Case %d:Yes\n",t1-t);
}
}

其实是有简单数学思路的,但当时没有想到;

不过这个虽然看起来好麻烦,但是还是不难理解吧

FZU-1881-Problem 1881 三角形问题,打表二分查找~~的更多相关文章

  1. HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛

    题目链接 题意:给定一个数n,求大于n的第一个只包含2357四个因子的数(但是不能不包含其中任意一种),求这个数. 题解:打表+二分即可. #include <iostream> #inc ...

  2. [LeetCode] #1# Two Sum : 数组/哈希表/二分查找/双指针

    一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of ...

  3. poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 6851 Description ...

  4. Codeforces 475D 题解(二分查找+ST表)

    题面: 传送门:http://codeforces.com/problemset/problem/475/D Given a sequence of integers a1, -, an and q ...

  5. Excel中如何在两个工作表中查找重复数据

    有时我们可能会在两种工作表中查找重复记录,当数据记录很多时,就必须通过简单的方法来实现.下面小编就与大家一起分享一下查看重复记录数据的方法,希望对大家有所帮助. 方法/步骤   为了讲解的需要,小编特 ...

  6. Justoj 2389: 拼接三角形 二分查找

    2389: 拼接三角形 时间限制: C/C++ 1 s      Java/Python 3 s      内存限制: 128 MB      答案正确: 7      提交: 21 提交 我的状态 ...

  7. 「ZJOI2018」胖(ST表+二分)

    「ZJOI2018」胖(ST表+二分) 不开 \(O_2\) 又没卡过去是种怎么体验... 这可能是 \(ZJOI2018\) 最简单的一题了...我都能 \(A\)... 首先我们发现这个奇怪的图每 ...

  8. Codeforces Round #425 (Div. 2) Problem C Strange Radiation (Codeforces 832C) - 二分答案 - 数论

    n people are standing on a coordinate axis in points with positive integer coordinates strictly less ...

  9. 【ZZ】详解哈希表的查找

    详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...

随机推荐

  1. popoverController使用注意--转

    一.设置尺寸 提示:不建议,像下面这样吧popover的宽度和高度写死. 1 //1.新建一个内容控制器 2 YYMenuViewController *menuVc=[[YYMenuViewCont ...

  2. php,json数据传输(无刷新)

    废话不说直接上关键代码: js代码: <script language="javascript"> $(".login").live('click' ...

  3. POJ1150he Last Non-zero Digit(组合)

    链接 题意从尾部找第一个非0的数 这样就可以考虑下怎样会形成0  这个都知道 只有因子2和因子5相遇会形成0 那这样可以先把所有的2和5先抽出来,这样就保证了其它的数相乘就不会再出现0了 这样就可以转 ...

  4. wp跳转到评价界面代码

    wp跳转到评价界面代码(仅适用于wp8.0) MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask(); ma ...

  5. Spring源码:Spring IoC容器加载过程(1)

    Spring源码版本:4.3.23.RELEASE 一.加载过程概览 Spring容器加载过程可以在org.springframework.context.support.AbstractApplic ...

  6. linux小白成长之路12————​Docker部署Nginx

    [内容指引] Docker安装Nginx: 简单启动: 准备配置文件: 一.Docker安装Nginx 指令:docker pull nginx 二.简单启动 指令:docker run --name ...

  7. 【转】码云source tree 提交超过100m 为什么大文件推不上去

    码云source tree 提交超过100m 为什么大文件推不上去 2017年01月12日 16:50:51 阅读数:7634 git -c diff.mnemonicprefix=false -c ...

  8. Bloom Filter概念和原理【转】

    Bloom Filter概念和原理 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有 ...

  9. 获取页面URL两种方式

    以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...

  10. SQL的top 100 percent用法

    sql="select top 30 * from data where title='"&title1&"' order by id desc" ...