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. 151 Reverse Words in a String 翻转字符串里的单词

    给定一个字符串,翻转字符串中的每个单词.例如,给定 s = "the sky is blue",返回 "blue is sky the".对于C程序员:请尝试用 ...

  2. Oracle及其相关软件历史版本下载地址

    https://edelivery.oracle.com/osdc/faces/Home.jspx 打开上面这个链接,输入自己或可用的帐号即可. 搜索到自己想要下载的软件后,点击,软件会添加到购物车中 ...

  3. Suricata的初始化脚本

    见官网 https://suricata.readthedocs.io/en/latest/initscripts.html

  4. unity内存管理

    最近一直在研究unity的内存加载,因为它是游戏运行的重中之重,如果不深入理解和合理运用,很可能导致项目因内存太大而崩溃. 详细说一下细节概念:AssetBundle运行时加载:来自文件就用Creat ...

  5. AI学习一:环境安装

    对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...

  6. Hive工具类

    Hive2.x的工具类,对常用方法进行了封装,其中设置了kerberos认证. package com.ideal.template.openbigdata.util; import java.sql ...

  7. liunx 常用的命令

    常用命令 ======================输入模式=================== Ctrl+d 向前缩进 Ctrl+t 向后缩进 =====================光标模式 ...

  8. Modal 高度 在里面css里写高 | iview

    .modalCss { height: 330px; overflow: auto; padding-right: 10px; }

  9. 看云&gitbook 写帮助文档 | 专注于文档在线创作、协作和托管

    看云 写帮助文档 | 专注于文档在线创作.协作和托管 https://www.kancloud.cn/manual/thinkphp/1678 https://www.gitbook.com/

  10. Kubernetes 架构(下)【转】

    上一节我们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点. Node 是 Pod 运行的地方,Kubernetes 支持 Docker.rkt 等容器 Run ...