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. 135 Candy 分配糖果

    There are N children standing in a line. Each child is assigned a rating value.You are giving candie ...

  2. C#中的委托(转)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  3. 【前端】html5获取经纬度,百度api获取街区名,并使用JS保存进cookie

    引用js<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak= ...

  4. [转]IntelliJ IDEA 自定义方法注解模板

    IntelliJ IDEA 自定义方法注解模板 置顶2017年08月02日 18:04:36 阅读数:32592 最近没啥事开始正式用Eclipse 转入 idea工具阵营,毕竟有70%的开发者在使用 ...

  5. Android学习笔记(十六) ContentProvider

    1.相关概念 ContentProvider:不同应用程序之间进行数据交换的标准API:程序“暴露”数据的方法. ContentResolver:一个程序访问另一个程序被“暴露”的数据的方法. Uri ...

  6. linux系统中文件的几种类型

    Linux系统是以文件的形式来进行管理的.Linux文件类型常见的有:普通文件.目录.字符设备文件.块设备文件.符号链接文件等,如果想了解这方面知识的弟兄,就进来了解了解. Linux系统不同于win ...

  7. Phalcon初认识

    Phalcon以c扩展交付的全堆栈php开发框架 基本功能 低开销:低内存消耗和CPU相比传统的框架 MVC和HMVC:模块.组件.模型.视图和控制器 依赖注入:依赖注入和位置的服务和它的本身他们的容 ...

  8. 解决python pip安装提示"not a supported wheel on this platform"

    python下载.whl安装文件后使用pip安装有时候会提示报错"xxxxx not a supported wheel on this platform",应该是下载的库文件版本 ...

  9. 【C++】cerr,cout,clog

    http://stackoverflow.com/questions/16772842/what-is-the-difference-between-cout-cerr-clog-of-iostrea ...

  10. .NET多线程总结

    1.不需要传递参数,也不需要返回参数 我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: public void test() { ThreadStart threadStart = ...