Showstopper

  题目大意:数据挖掘是一项很困难的事情,现在要你在一大堆数据中找出某个数重复奇数次的数(有且仅有一个),而且要你找出重复的次数。

  其实我一开始是没读懂题意的。。。主要是我理解错object的意思了- -

  这一题原理要做出来不难,其实就是二分法,对数二分就好了,因为重复奇数次的数只有一个,所以肯定存在小于等于某一个数时的数的重复次数加起来是奇数,不断二分就可

  关键是是这一题的数据输入超级麻烦,他还会隔行输入。。。。用一行或者多行来区分数据。。。一开始我跳进这个坑里面了。。出题人有意思吗?

  不过还好,让我重新复习了sscanf的用法。。。网上找了个用法比较好的做范例吧。

  

 #include <iostream>
#include <functional>
#include <algorithm>
#include <string.h> typedef long long LL_INT; struct _set
{
LL_INT set_att[];
}refer[]; void Solve(const int, LL_INT);
LL_INT Max(LL_INT, LL_INT);
bool judge(LL_INT, const int);
int Cal_Sum(const int, LL_INT); int main(void)//找出某个数出现的次数为奇数次的数
{
int sum = ;
LL_INT max_num;
char str[]; while (gets(str))
{
sum = ; max_num = -; refer[].set_att[] = ;
sscanf(str, "%lld %lld %lld", &refer[].set_att[], &refer[].set_att[], &refer[].set_att[]);
if (refer[].set_att[] == )
continue;
memset(str, , sizeof(str));
do{
sum++;
gets(str);
if (str[] == ) break;
sscanf(str, "%lld %lld %lld", &refer[sum].set_att[], &refer[sum].set_att[], &refer[sum].set_att[]);
memset(str, , sizeof(str));
max_num = Max(max_num, refer[sum].set_att[]);
} while ();
Solve(sum, max_num);
}
return EXIT_SUCCESS;
} LL_INT Max(LL_INT x, LL_INT y)
{
return x > y ? x : y;
} int Cal_Sum(const int i, LL_INT ans)
{
if (ans<refer[i].set_att[] || ans>refer[i].set_att[])
return ;
else if ((ans - refer[i].set_att[]) % refer[i].set_att[] == )
return ;
else return ;
} void Solve(const int set_sum, LL_INT max_num)
{
LL_INT lb = , ub = max_num, mid, res = ; while (ub - lb > )
{
mid = (lb + ub) >> ;
if (judge(mid, set_sum)) ub = mid;
else lb = mid;
}
for (int i = ; i < set_sum; i++)
res += Cal_Sum(i, ub);
if (res % )
printf("%lld %lld\n", ub, res);
else
printf("no corruption\n");
} bool judge(LL_INT mid, const int set_sum)
{
//只用统计mid(包含mid)的半边就可以了,因为出现奇数次的数只有一个
LL_INT refer_sum = ;
for (int i = ; i < set_sum; i++)
{
if (mid < refer[i].set_att[])//没有任何数出现在左边
continue;
else if (mid > refer[i].set_att[])
refer_sum += (refer[i].set_att[]- refer[i].set_att[]) / refer[i].set_att[] + ;
else
refer_sum += (mid - refer[i].set_att[]) / refer[i].set_att[] + ;
}
return refer_sum % ? : ;
}

  

  参考http://blog.csdn.net/sd_invol/article/details/9410407

    http://blog.csdn.net/u012825876/article/details/27854225

Divide and conquer:Showstopper(POJ 3484)的更多相关文章

  1. Divide and conquer:Sumsets(POJ 2549)

    数集 题目大意:给定一些数的集合,要你求出集合中满足a+b+c=d的最大的d(每个数只能用一次) 这题有两种解法, 第一种就是对分,把a+b的和先求出来,然后再枚举d-c,枚举的时候输入按照降序搜索就 ...

  2. Divide and conquer:Subset(POJ 3977)

    子序列 题目大意:给定一串数字序列,要你从中挑一定个数的数字使这些数字和绝对值最小,求出最小组合数 题目的数字最多35个,一看就是要数字枚举了,但是如果直接枚举,复杂度就是O(2^35)了,显然行不通 ...

  3. Divide and conquer:Garland(POJ 1759)

     挂彩灯 题目大意:就是要布场的时候需要挂彩灯,彩灯挂的高度满足: H1 = A Hi = (Hi-1 + Hi+1)/2 - 1, for all 1 < i < N HN = B Hi ...

  4. Divide and conquer:Matrix(POJ 3685)

    矩阵 题目大意:矩阵里面的元素按i*i + 100000 * i + j*j - 100000 * j + i*j填充(i是行,j是列),求最小的M个数 这一题要用到两次二分,实在是二分法的经典,主要 ...

  5. Divide and conquer:Median(POJ 3579)

        快速求两数距离的中值 题目大意:给你一个很大的数组,要你求两个数之间的距离的中值 二分法常规题,一个pos位就搞定的事情 #include <iostream> #include ...

  6. Divide and conquer:Drying(POJ 3104)

    烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服? ...

  7. [LeetCode] 236. Lowest Common Ancestor of a Binary Tree_ Medium tag: DFS, Divide and conquer

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  8. [LeetCode] 系统刷题4_Binary Tree & Divide and Conquer

    参考[LeetCode] questions conlusion_InOrder, PreOrder, PostOrder traversal 可以对binary tree进行遍历. 此处说明Divi ...

  9. [LeetCode] 124. Binary Tree Maximum Path Sum_ Hard tag: DFS recursive, Divide and conquer

    Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any ...

随机推荐

  1. golang笔记——数据类型

    25个关键字 程序声明:import, package 程序实体声明和定义:chan, const, func, interface, map, struct, type, var 程序流程控制:go ...

  2. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 2014-03-27 11:44:46|  分类: Easy UI|举报|字号 订阅     可以使用$.parser.pa ...

  3. [译]ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...

  4. 怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解

    注意域名,动静分离的网站,只对静态文件的域名做了cdn 怎么看网站有没开启CDN? 要看一个网站是否开启CDN,方法很简单,只要在不同的地区ping网址就可以,比如在山东济南ping www.jb51 ...

  5. jQuery对话框插件 ThickBox

    http://baike.haosou.com/doc/7607201-7881296.html 项目已经停止维护,但该插件还是不错的! ThickBox是一个基于JQuery类库的扩展,它能在浏览器 ...

  6. 基于jQuery的对象切换插件:soChange 1.5 (点击下载)

    http://www.jsfoot.com/jquery/demo/2011-09-20/192.html 所有参数: $(obj).soChange({     thumbObj:null, //导 ...

  7. Java多线程基础知识(五)

    一. Java中的13个原子操作类 在Jdk1.5中,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全的更新一个变量的方式. 1. 原子更新基本类型类 AtomicBoolean : 原子更 ...

  8. Android学习笔记(二十一)——实战:程序数据共享

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 我们继续在Database项目的基础上继续开发,通过内容提供器来给它加入外部访问接口.首先将 MyDataba ...

  9. 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...

  10. PyQt4自定义事件

    listview控件与updateText 相关联 self.listview.updateText.connect(self.viewlist)   updateText = QtCore.pyqt ...