秦时明月

(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模拟赛】秦时明月的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  10. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

随机推荐

  1. 监控mysql主从同步状态脚本

    监控mysql主从同步状态脚本 示例一: cat check_mysql_health #!/bin/sh slave_is=($(mysql -S /tmp/mysql3307.sock -uroo ...

  2. Android 使用PullToRefreshExpandableListView不能setAdapter的问题

    private PullToRefreshExpandableListView lv; lv = (PullToRefreshExpandableListView) findViewById(R.id ...

  3. div元素呈圆环排列

    <style> .path { width: 300px; height: 300px; padding: 20px; border-radius: 50%; background: rg ...

  4. Add Digits

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  5. UIPickerView详解

    一.UIPickerView 1.UIPickerView的常见属性 // 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id< ...

  6. Java命令参数说明大全

    Java 在运行已编译完成的类时,是通过 java 虚拟机来装载和执行的,java 虚拟机通过操作系统命令 JAVA_HOME\bin\java –option 来启动,-option 为虚拟机参数, ...

  7. 圆的反演变换(HDU4773)

    题意:给出两个相离的圆O1,O2和圆外一点P,求构造这样的圆:同时与两个圆相外切,且经过点P,输出圆的圆心和半径 分析:画图很容易看出这样的圆要么存在一个,要么存在两个:此题直接解方程是不容易的,先看 ...

  8. iis access denied, you do not have permission.

    this kind of problems are usually caused by some IIS configuration issues, like application pool set ...

  9. acm算法模板(5)

    STL 中 sort 函数用法简介 做 ACM 题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的 O(n^2) 排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错. ST ...

  10. [原创]安装Oracle 11gR2,以及如何在win8下使用plsql develper连接Oracle数据库 ,在这里和大家分享下

    一,关于win8下安装Oracle 11gR2 1.我下载的是Oracle_11gR2_win64.其中有两个包: 注意:在解压了之后将:win64_11gR2_database_2of2\datab ...