csu oj 1343 Long Long
Description
现在有两个单调递增序列,第一个序列有N个整数,第二个序列有M个整数,现在你可以从第一个序列中选一个数x,然后从第二个序列中选一个数y,那么有多少种情况满足x+y<=K呢?
Input
输入包含多组数据。
对于每组测试数据,第一行包含两个整数N, M , K (1 <= N, M <= 105, 1 <= K <= 109),含义同上。接下来一行包含N个在[1, 109]范围内的整数,依次描述了第一个序列中的各个整数。再接下来一行包含M个在[1, 109]范围内的整数,依次描述了第二个序列中的各个整数。
Output
对于每组数据,输出有多少种情况满足x + y <= K。
Sample Input
Sample Output
Hint
其实如果两个序列并不是有序的,我们也可以先通过排序使其变得有序,然后就和现在的这个题目一样了,不过由于这个题目并不是为了介绍排序,所以干脆就直接给出有序的序列了。
由于int的范围有限,当要读入的数或者要输出的数超出了int的表示范围但没有超出long long的表示范围时,我们就要使用long long了。如果OJ的服务器是Linux的,那么用“%lld”(前面是两个小写的L)来控制long long的读入和输出,而如果OJ的服务器是Windows的,则需要用“%I64d”(前面是一个大写的i)来控制long long的读入和输出,这一点一般会在OJ的“F.A.Q”有所说明的。由于我们的服务器是采用的Linux操作系统,所以使用“%lld”就OK了。
比如这个题目,极端情况就所有情况都满足,也就是N*M中情况,当N和M都取极限值时,显然结果就需要用long long来保存并输出了。
那么这个题目具体要怎么做呢?
也许你一眼就看出来了,两层for循环就可以搞定嘛,不过很可惜这样估计要妥妥超时,要不试一下?
我们不妨仔细梳理一下思路,两层for循环做法的基本思想应当是首先枚举第一个序列中拿出的数x,然后再寻找第二个序列中有多少个整数y满足x+y<=K。其实我们不难发现,每次只要找到满足x+y<=K最大的y就可以了,不妨记为max_y,那么max_y以及max_y之前的数是一定都满足x+y<=K的,这样根据max_y所在的位置,我们就能直接计算出对于当前枚举到的x有多少个y满足x+y<=K了。而找这个max_y的过程真的需要一层for循环吗?你可能已经想到了,我们完全可以用“二分”的方法去找这个max_y,这样就能快很多了。如果你对“二分”还没有任何概念也没关系,因为我们还有另外一种办法也可以达到这个目的。
我们不妨设先后枚举到的两个相邻的x分别为x1和x2,并设x1对应的max_y为max_y1,x2对应的max_y为max_y2,由于x1<x2,我们可以得到max_y2<=max_y1。但这个有什么用呢?当然有用了,我们在找max_y2的时候就可以直接从max_y1开始递减去找了。如果再枚举到x3呢?那么一样有max_y3<=max_y2,我们直接从max_y2开始递减去找max_y3。不过也许你可能会怀疑了:这样真的能比两层for循环快吗?好像这样也是两个变量不停地在循环呀?
至于为什么会快还是交由你自己来思考吧,如果你对刚刚说的思路还没有什么概念的话不妨结合下面我给出的示例代码来看一下。
#include<stdio.h>
#define MAX 100001
int n[MAX], m[MAX],N,M,K;
int main()
{
while(scanf("%d%d%d",&N,&M,&K)!=EOF)
{
for(int i=;i<=N;i++)
{
scanf("%d",&n[i]);
}
for(int i=;i<=M;i++)
{
scanf("%d",&m[i]);
} long long sum=; for(int i=;i<=N;i++)
{
while(n[i]+m[M]>K&&M)
{
--M;
}
sum+=M;
}
printf("%lld\n",sum);
}
return ;
}
csu oj 1343 Long Long的更多相关文章
- csu oj 1339: 最后一滴血
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339 1339: 最后一滴血 Time Limit: 1 Sec Memory Limit: 1 ...
- csu oj 1330 字符识别?
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1330 1330: 字符识别? Time Limit: 1 Sec Memory Limit: 1 ...
- csu oj 1811: Tree Intersection (启发式合并)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 给你一棵树,每个节点有一个颜色.问删除一条边形成两棵子树,两棵子树有多少种颜色是有 ...
- csu oj 1804: 有向无环图 (dfs回溯)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 中文题意就不说了. dfs从底到根回溯即可,看代码应该能清楚. //#pragma ...
- csu oj 1344: Special Judge
Description Given a positive integer n, find two non-negative integers a, b such that a2 + b2 = n. I ...
- csu oj 1341 string and arrays
Description 有一个N*N的字符矩阵,从上到下依次记为第1行,第2行,……,第N行,从左至右依次记为第1列,第2列,……,第N列. 对于这个矩阵会进行一系列操作,但这些操作只有两类: (1) ...
- CSU OJ 1340 A Sample Problem
Description My girlfriend loves 7 very much, she thinks it is lucky! If an integer contains one or m ...
- 九度OJ 1343:城际公路网 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:445 解决:178 题目描述: 为了加快城市之间的通行和物资流动速度,A国政府决定在其境内的N个大中型城市之间,增加修建K条公路.已知这N个 ...
- CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
1514: Packs Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 61 Solved: 4[Submit][Status][Web Board] ...
随机推荐
- getAttribute与getParameter的区别
1.getParameter得到的是字符串,其取值源于jsp页面,从jsp页面中接受一个存在的参数,多用于servlet中,用于判断业务的类型和跳转页面.如: request.getParameter ...
- AngularJS 笔记1
2017-03-23 本文更新链接: http://www.cnblogs.com/daysme/p/6606805.html 什么是 angularjs 2009年有两个外国人创建,后由谷歌收购并开 ...
- URL简单梳理
# DEBUG模式: 开启debug模式后,修改项目代码时按下ctrl+s可重启项目: 项目中出现bug时,浏览器与控制台会打印错误信息: 在生产环境中禁止开启DEBUG模式,有很大的安全隐患: 将D ...
- 小程序学习一 .json 文件配置
微信小程序——配置 以下就是小编对小程序配置的资料进行的系统的整理,希望能对开发者有帮助. 我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置 ...
- 前端调用后端接口下载excel文件的几种方式
今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...
- 理解 Redis(3) - 字符串值
正如前面所讲的, redis 的数据结构就是一系列的键值对键 -> printable ASCII (可打印的 ASCII 码, 最大值是 512MB)值 -> Primitives (基 ...
- Java生成指定长度的随机数
char[] str = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', ' ...
- 封装微信小程序支付
<?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ namespace Common\Service; use Think\Exception; ...
- 虹软 Android 人脸检测与人脸识别集成分享
目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得 集成ArcFace FD 的集成过程非常简单 在 ArcFace FD ...
- Codeforces 686 D - Kay and Snowflake
D - Kay and Snowflake 思路: 树的重心 利用重心的一个推论,树的重心必定在子树重心的连线上. 然后利用重心的性质,可知,如果有一颗子树的大小超过整棵树的大小的1/2,那么树的重心 ...