HDU 4768 (二分区间---涨姿势)
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字。
分析:读完题并没有思路,后来知道是二分区间,枚举是哪个数字出现了奇数次,算该数字之前一共有几个数字,如果是奇数个,说明答案就在[L , Mid]中。
PS:之前用二分只是枚举具体要求的数字,原来枚举区间也可以,真的涨姿势。二分的时候 l = mid + 1,r = mid ;(一开始r = mid + 1,l = mid就无限循环,手算并没有错啊?很奇怪。。。)
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(ll i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define pfi(n) prllf("%d\n", n)
#define INF 0x3f3f3f3f3f
#define N 20010
ll a[N],b[N],c[N];
int n;
ll judge(ll p)///p之前已经发了多少张传单了
{
ll sum = ;
repu(i,,n)
{
ll t = min(p,b[i]);
if(t >= a[i])
sum += ((t - a[i])/c[i] + 1ll);
}
return sum%2ll;
}
int main()
{
while(~scanf("%d",&n))
{
ll sum = 0ll,t = 0ll,l = INF,r = 0ll;
repu(i,,n)
{
scanf("%I64d%I64d%I64d",&a[i],&b[i],&c[i]);
r = max(r,b[i]);
l = min(l,a[i]);
}
if(!judge(r))
{
printf("DC Qiang is unhappy.\n");
continue;
}
ll mid = 0ll;
while(l < r)
{
mid = (l + r)/2ll;
if(judge(mid))///如果是奇数
r = mid ;
else
l = mid +1ll;
}
///求具体有几张
sum = 0ll;
repu(i,,n)
{
if(r >= a[i] && r <= b[i])
if((r - a[i])%c[i] == )
sum++;
}
printf("%I64d %I64d\n",r,sum);
}
return ;
}
AC
HDU 4768 (二分区间---涨姿势)的更多相关文章
- HDU 5875 st+二分区间
题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,再二分区间,复杂度n*(l ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 5726 GCD 区间GCD=k的个数
GCD Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- hdu 4024 二分
转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html 一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...
- HDU 4768 Flyer(二分)
题目链接: 传送门 Flyer Time Limit: 1000MS Memory Limit: 32768 K Description The new semester begins! Di ...
- hdu 4768 Flyer 二分
思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstd ...
- HDU - 4614 Vases and Flowers(二分+区间修改)
https://cn.vjudge.net/problem/HDU-4614 题意 n个花瓶,m个操作,花瓶里面有的有花,有的是空的.1操作是从a开始往右放b朵花,花瓶有了的不放,跳过,直到a右边都放 ...
- HDU 4768 Flyer【二分】||【异或】
<题目链接> <转载于 >>> > 题目链接: n个社团派发传单,有a,b,c三个参数,派发的规则是,派发给序号为a,a+c....a+k*c,序号要求是小 ...
- HDU 5289 Assignment (二分+区间最值)
[题目链接]click here~~ [题目大意]: 给出一个数列,问当中存在多少连续子序列,子序列的最大值-最小值<k [思路]:枚举数列左端点.然后二分枚举右端点,用ST算法求区间最值.(或 ...
随机推荐
- notePad++ 使用
Ctrl+L 删除当前行 Ctrl+D 复制 Alt +鼠标 列选中 鼠标选中行首 点一下形成一标识,用F2 可以切换标识 C:\Users\纯访\AppData\Roaming\Microsoft ...
- 运用EasyUI中datagrid读取数据库数据实现分页
1dao层 package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import org.hibernate ...
- Core Data
• Core Data 是 iOS SDK 里的一个很强大的框架,允许程序员 以面向对象 的方式储存和管理数据 .使用 Core Data 框架,程序员可以很轻松有效 地通过面向对象的接口 ...
- 《BI项目笔记》多维数据集中度量值设计时的聚合函数
Microsoft SQL Server Analysis Services 提供了几种函数,用来针对包含在度量值组中的维度聚合度量值.默认情况下,度量值按每个维度进行求和.但是,通过 Aggrega ...
- Model Binding
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- hdu2296Ring(ac自动机+dp)
链接 dp[i][j]表示长度为i在节点J的时候的权值最大值,根据trie树转移一下就行,需要每次都取最小的,所以需要另开一数组保存字典序最小的状态. #include <iostream> ...
- ssh框架介绍
SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架, ...
- 转:VC include 路径解析
VC include 路径解析 要了解vc中使用#include命令包含头文件所搜寻的路径,必须先了解vc中的几种路径: 1. 系统路径 系统路径在vc中是"Tools->Option ...
- 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration.
启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration. 出现此异常是因为,str ...
- 监控 Linux Unix Solaris AIX, swap page in / swap page out
vmstat 的 pi/po si/so --监控一天 vmstat 5 17280> vmstat.txt sar -W 1.得到数据 (linux 的 /var/log/sar/saX 自带 ...