【NOIP模拟赛】秦时明月
秦时明月
(sword.cpp/c/pas)
【问题描述】
卫庄与盖聂又要论剑了,因为渊虹和鲨齿都是天下名剑,论剑容易互相损伤,太过可惜,于是两位换了两把木剑。因为木剑质地不匀,剑的每一段都有一个坚韧值,论剑时不定两把剑会如何相碰,即剑相碰时可以想象为两把剑上的随机各选一段相碰,两把剑上的每一段被选中的概率都相等,柔韧值高的自然是赢家。现在已知卫庄盖聂手上的剑各有几段,每段柔韧值是多少,求盖聂的胜率(用最简分数的形式表示出来)。
【输入格式】
第一行包含用空格隔开的 2 个正整数 N,M。分别表示卫庄、盖聂手上的剑一共有多少段
第二行有 N 个正整数 Ai,表示卫庄手上的剑每段的坚韧值
第三行有 M 个正整数 Bi,表示盖聂手上的剑每段的坚韧值
【输出格式】
输出文件应包含两个正整数 U,D,表示盖聂的胜率为 U/D(最简形式)
【输入样例】
2 2 1 4 2 3
【输出样例】
1 2
【数据规模与约定】
对于 30%的数据 N,M≤1000
对于 70%的数据 N,M≤100000
对于 100%的数据 N,M≤1000000,Ai,Bi≤10^9
【试题分析】
乍一看:水题!哈哈!
再一看:数据规模有点大
当然,暴力党们肯定是能水过30%了,一个一个比对就可以了。
但是话说我们今天不是去关注30%的题解,我们的目标是100%(突然想起来黄学长的:我们的征途是星辰大海QAQ,是不是很押韵?)
代码实现起来其实很简单,但在这背后有许多思考。
我们先来谈谈70%怎么过吧!
一开始可以想到只用一个数组存储,先把第一个人的数据存下来,再在第二个人的输入过程中处理。
这只是省了一点点空间而已,现在我们要来省省时间了。
其实排一个序就足以解决70分的所有问题。
先让第一个人的数据输入完,然后再排一下序,这当然是对答案没有任何影响的。
然后第二个人输入的每一次数据从a[1]一直到比它小的最后一个就都是可以赢的情况,所以我们可以这样优化。
那100%你应该想到了吧!
你肯定知道一个叫鹅粪查找的东西吧!
恍然大悟?
我们可以直接加下标啊!何必一个一个去试呢?
因此,我们只需要查找最后一个比输入元素小的下标。
如果你的gcd不是傻傻的暴力,而且输入不是傻傻的cin的话,应该就能过了
是不是很神奇!?
我们来看代码吧!
【代码】
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int a[1000100]; long long U,D; int b; int M,N; bool w=false; int binary_search(int* a,int len,int goal) { int low=1; int high=len; while(low<=high) { int middle=(high-low)/2+low; if (a[middle]==goal){w=true;return middle;} else if(a[middle]>goal) high=middle-1; else low=middle + 1; } return low; } long long gcd(long long a,long long b) { return b==0?a:gcd(b,a%b); } int main() { scanf("%d%d",&N,&M); D=(long long)N*M; for(int i=1;i<=N;i++) scanf("%d",&a[i]); sort(a+1,a+N+1); for(int i=1;i<=M;i++) { scanf("%d",&b); w=false; int at=binary_search(a,N,b); if(w==false) at--; U+=at; } long long gcdans=gcd(U,D); U/=gcdans; D/=gcdans; printf("%lld %lld",U,D); }
【NOIP模拟赛】秦时明月的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- CentOS7 + linux kernel 3.10.94 compile 简记
Linux kernel 一直以其开源著称,可以自己编译选择合适的模块,针对特定的系统可以有不同的编译选项 来源 此次编译的内核版本为3.10.94,从官网www.kernel.org下载而来,自己虚 ...
- Educational Codeforces Round 16---部分题解
710A. King Moves 给你图中一点求出它周围有几个可达的点: 除边界之外都是8个,边界处理一下即可: #include<iostream> #include<cstdio ...
- PresentViewController切换界面(一些系统自带的页面切换动画)
视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画, 其中切换方法如下: – presentViewCon ...
- Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never diffe
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class ...
- LeetCode Longest Palindrome
原题链接在这里:https://leetcode.com/problems/longest-palindrome/ 题目: Given a string which consists of lower ...
- Android系统框架
从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层 应用程序层: 简单说就是我们用户肉眼能看到的应用程序,如SMS短信客 ...
- linux 进入mysql
mysql -u root -ppassword show databases; \h 帮助 \q 退出
- Java控制语句——if语句
Java控制语句分为三大类:①顺序结构:②选择结构:③循环结构. 选择结构又分为:①单选择结构:②双选择结构:③多选择结构. 主要涉及: if_else , switch , while , brea ...
- 第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- iOS - (TableView中利用系统的 cell 设置 cell.textlabel 位置和大小)
今天工作稍微的遇到了一点小小的难题,需求效果中 TableView cell 中的 Label 字体大小比原先系统中的要大些且 Label 位置不是在前面,而是在中间往后,对于这个问题我第一时间也是想 ...