FZU-1881-Problem 1881 三角形问题,打表二分查找~~
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Description
Input
Output
Sample Input
Sample Output
用 了一种很麻烦的方法做出来的,看规律又看不出,但发现在同一行中相邻则相差为一,如果不在同一行,设两个元素为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 三角形问题,打表二分查找~~的更多相关文章
- HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛
题目链接 题意:给定一个数n,求大于n的第一个只包含2357四个因子的数(但是不能不包含其中任意一种),求这个数. 题解:打表+二分即可. #include <iostream> #inc ...
- [LeetCode] #1# Two Sum : 数组/哈希表/二分查找/双指针
一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of ...
- poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 6851 Description ...
- Codeforces 475D 题解(二分查找+ST表)
题面: 传送门:http://codeforces.com/problemset/problem/475/D Given a sequence of integers a1, -, an and q ...
- Excel中如何在两个工作表中查找重复数据
有时我们可能会在两种工作表中查找重复记录,当数据记录很多时,就必须通过简单的方法来实现.下面小编就与大家一起分享一下查看重复记录数据的方法,希望对大家有所帮助. 方法/步骤 为了讲解的需要,小编特 ...
- Justoj 2389: 拼接三角形 二分查找
2389: 拼接三角形 时间限制: C/C++ 1 s Java/Python 3 s 内存限制: 128 MB 答案正确: 7 提交: 21 提交 我的状态 ...
- 「ZJOI2018」胖(ST表+二分)
「ZJOI2018」胖(ST表+二分) 不开 \(O_2\) 又没卡过去是种怎么体验... 这可能是 \(ZJOI2018\) 最简单的一题了...我都能 \(A\)... 首先我们发现这个奇怪的图每 ...
- 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 ...
- 【ZZ】详解哈希表的查找
详解哈希表的查找 https://mp.weixin.qq.com/s/j2j9gS62L-mmOH4p89OTKQ 详解哈希表的查找 2018-03-01 算法与数据结构 来自:静默虚空 http: ...
随机推荐
- shell getopts
1, 分类: LINUX getopts命令内置于shell中,可以获取由单个字符所指定的有效命令行参数,单个字符有一个‘ - ’号或‘ + ’号. 简单的说,比如运行命令: iptables -t ...
- poj2282The Counting Problem(组合)
链接 计算0-9每一个数字出现的次数 逐位进行处理 对于每一位取几时依次算下组合的情况 注意0的情况需要特殊处理一下 因为0000 00 这样都是等于0的 前面的几位是多余的 #include < ...
- 虚方法virtual详解
虚方法virtual详解 从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在 ...
- springdata-jpa 八种查询方法
使用:maven+Spring+jpa+Junit4 查询方式:SQL,JPQL查询,Specification多条件复杂查询 返回类型:list<POJO>,list<Stinrg ...
- 我的关于phoneGap的安装及测试。
一.PhoneGap简介 PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用 iPhone,Android,Palm,S ...
- Selenium私房菜系列1 -- Selenium简介
一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...
- innerHTML的性能问题
看到一遍文章When innerHTML isn’t Fast Enough,反应了innerHTML在操作量大了以后的性能下降的问题. 并且给出了一个replaceHTML的函数 function ...
- JS正则表达式匹配<div><style>标签
测试字符串: <style>v\:* { BEHAVIOR: url(#default#VML) } o\:* { BEHA ...
- 项目中常用git命令操作指令(一般正常的话够用不够再看相关git命令)
配置git1.首先在本地创建ssh key:ssh-keygen -t rsa -C "github上注册的邮箱" //(一路回车)2.进入c:/Users/xxxx_000/.s ...
- k8s集群之master节点部署
apiserver的部署 api-server的部署脚本 [root@mast-1 k8s]# cat apiserver.sh #!/bin/bash MASTER_ADDRESS=$1 主节点IP ...