poj 3484 Showstopper
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 2236 | Accepted: 662 |
Description
Data-mining huge data sets can be a painful and long lasting process if we are not aware of tiny patterns existing within those data sets.
One reputable company has recently discovered a tiny bug in their hardware video processing solution and they are trying to create software workaround. To achieve maximum performance they use their chips in pairs and all data objects in memory should have even number of references. Under certain circumstances this rule became violated and exactly one data object is referred by odd number of references. They are ready to launch product and this is the only showstopper they have. They need YOU to help them resolve this critical issue in most efficient way.
Can you help them?
Input
Input file consists from multiple data sets separated by one or more empty lines.
Each data set represents a sequence of 32-bit (positive) integers (references) which are stored in compressed way.
Each line of input set consists from three single space separated 32-bit (positive) integers X Y Z and they represent following sequence of references: X, X+Z, X+2*Z, X+3*Z, …, X+K*Z, …(while (X+K*Z)<=Y).
Your task is to data-mine input data and for each set determine weather data were corrupted, which reference is occurring odd number of times, and count that reference.
Output
For each input data set you should print to standard output new line of text with either “no corruption” (low case) or two integers separated by single space (first one is reference that occurs odd number of times and second one is count of that reference).
Sample Input
1 10 1
2 10 1 1 10 1
1 10 1 1 10 1
4 4 1
1 5 1
6 10 1
Sample Output
1 1
no corruption
4 3
Source
/*
* @Author: Lyucheng
* @Date: 2017-07-29 20:58:28
* @Last Modified by: Lyucheng
* @Last Modified time: 2017-08-02 09:59:49
*/
/*
题意:每次给你X,Y,Z表示产品序列 X,X+Z,X+2*Z,X+3*Z,...,X+k*Z(X+K*Z<Y),让你判断哪个产品名出现过的次数不是偶数次 思路:异或判断哪个出现过奇数次,然后map计数 错误:上面的思路时间复杂度会炸掉的,这个题连数据范围都没有 改进:换种思路,看了题解才想到,二分答案,因为之多有一个是奇数个访问的,所以访问次数的前缀和一定从这个数变成奇数
利用这个性质来二分答案 注意的点:这个题数据范围不清晰,要用无符号longlong,并且用I64d输入,cout输出,我试了其他的方式都错了,还有读入空
行要单独处理
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <sstream> #define MAXN 1024
#define MAXM 1000005
#define MAX 0xffffffff
#define MIN 0
#define ULL unsigned long long
using namespace std; char str[MAXN];
ULL X[MAXM],Y[MAXM],Z[MAXM];
ULL res;
int n; inline ULL getsum(ULL m){
ULL sum=;
for(int i=;i<n;i++){
if(m>=Y[i]){
sum+=(Y[i]-X[i])/Z[i]+;
}else if(m>=X[i]){
sum+=(m-X[i])/Z[i]+;
}
}
return sum;
} inline void init(){
n=;
res=;
} int main(){
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
while(gets(str)){
init();
if(strlen(str)>=){//不是空的
sscanf(str,"%I64d %I64d %I64d",&X[n],&Y[n],&Z[n]);
res^=( (Y[n]-X[n])/Z[n]+);
n++;
}
while(gets(str)!=NULL){
if(strlen(str)>=){//不是空的
sscanf(str,"%I64d %I64d %I64d",&X[n],&Y[n],&Z[n]);
res^=( (Y[n]-X[n])/Z[n]+);
n++;
}else{
break;
}
}//读入完成
if(n==){
continue;
}
if(!(res&)){//如果调用次数本身就是偶数
cout << "no corruption" << endl;
continue;
}
ULL l=MIN,r=MAX,m;
while(r-l>){
m=(l+r)/;
if(getsum(m)%==MIN){//前缀和是偶数的
l=m+;
}else{//前缀和是奇数的
r=m;
}
}
cout<<l<<" "<<getsum(l)-getsum(l-)<<endl;
}
return ;
}
poj 3484 Showstopper的更多相关文章
- POJ 3484 Showstopper(二分答案)
[题目链接] http://poj.org/problem?id=3484 [题目大意] 给出n个等差数列的首项末项和公差.求在数列中出现奇数次的数.题目保证至多只有一个数符合要求. [题解] 因为只 ...
- Divide and conquer:Showstopper(POJ 3484)
Showstopper 题目大意:数据挖掘是一项很困难的事情,现在要你在一大堆数据中找出某个数重复奇数次的数(有且仅有一个),而且要你找出重复的次数. 其实我一开始是没读懂题意的...主要是我理解错o ...
- POJ 3484
Showstopper Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1060 Accepted: 303 Descri ...
- POJ 3484 二分
Showstopper Description Data-mining huge data sets can be a painful and long lasting process if we a ...
- ProgrammingContestChallengeBook
POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 ...
- POJ 1064 1759 3484 3061 (二分搜索)
POJ 1064 题意 有N条绳子,它们长度分别为Li.如果从它们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留小数点后2位. 思路 二分搜索.这里要注意精度问题,代码中有详细说 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
随机推荐
- All about Div内显示滚动桥
Div内显示滚动桥看似是一个简单的前端问题,然而实际会发现还是有挺多需要注意的, 本文尝试对div内显示滚动桥的各种主要实现及一些难题进行研究. 横向滚动桥 横向滚动桥比较简单,无需设置宽度,直接ov ...
- BZOJ1207_打鼹鼠_KEY
[HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地 ...
- 【转】elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- ElasticSearch入门(2) —— 基础概念
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库: Relational DB -> Dat ...
- Life Forms (poj3294 后缀数组求 不小于k个字符串中的最长子串)
(累了,这题做了很久!) Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8683 Accepted ...
- RuntimeError: Python is not installed as a framework 错误解决办法
因为我是macbook,mac是自带的python 2.7,但是我开发需要使用到的是python3,所以先使用pip3 install matplotlib 然后在交互页面键入import matpl ...
- Python中wx.FlexGridSizer
FlexGridSizer是GridSizer的一个更灵活的版本.它与标准的GridSizer几乎相同,除了下面3点例外: 1.每行和每列可以有各自的尺寸.2.默认情况下,当尺寸调整时,它行和列整体改 ...
- SqlServer和Oracle中一些常用的sql语句5 流程控制语句
--在sql语句中 begin...end 用来设定一个程序块 相关于c#中的{} declare @yz real,@w int --声明变量 set @w=120 --为变量赋值 if @w< ...
- 吾八哥学Python(二):Python代码编辑器的选用
Python开发环境配置好了,但发现自带的代码编辑器貌似用着有点不大习惯啊,所以咱们就找一个"好用的"代码编辑器吧,网上搜了一下资料,Python常用的编辑器有如下一些: 1. S ...
- layim+signalr2.0在线轻聊版解决方案
本内容有版权限制,仅提供学习交流参考等等,请勿随便转载或者代码商用. /** layui-v2.1.5 MIT License By http://www.layui.com */; layu ...