济南学习 Day1 T3 pm

【问题描述】
小 Q 对计算几何有着浓厚的兴趣。他经常对着平面直角坐标系发呆,思考
一些有趣的问题。今天,他想到了一个十分有意思的题目:
首先,小 Q 会在x轴正半轴和y轴正半轴分别挑选??个点。随后,他将x轴的
点与y轴的点一一连接,形成??条线段,并保证任意两条线段不相交。小 Q 确定
这种连接方式有且仅有一种。最后,小 Q 会给出m个询问。对于每个询问,将会
给定一个点P(Px ,Py),请回答线段 OP 与m条线段会产生多少个交点?
小 Q 找到了正在钻研数据结构的你,希望你可以帮他解决这道难题。
【输入格式】
第1一个正整数n,表示线段的数量;
第2行包含n个正整数表示小Q在x轴选取的点的横坐标 第3行包含n个正整数,表示小 Q 在y轴选取的点的纵坐标;
第 4 行包含一个正整数m,表示询问数量;
随后??行,每行包含两个正整数Px ,Py ,表示询问中给定的点的横、纵坐标。
【输出格式】
共??行,每行包含一个非负整数,表示你对这条询问给出的答案。
【样例输入】
3
4 5 3
3 5 4
2
1 1
3 3
【样例输出】
0
3
【样例解释】
然后塔里啥都没有。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cctype>
 5 #include<iostream>
 6 #include<algorithm>
 7 using namespace std;
 8 const int BUF_SIZE = 30;
 9 char buf[BUF_SIZE], *buf_s = buf, *buf_t = buf + 1;
10 const int maxn = 200010;
11 long long x[maxn], y[maxn];
12 int n, m;
13 bool toLeft(int num, long long _x, long long _y) {
14     return (x[num] * _y + y[num] * (_x - x[num])) >= 0;
15 }
16 int getcnt(long long _x, long long _y) {
17     int l = 0, r = n + 1;
18     while (l < r - 1) {
19         int mid = (l + r) >> 1;
20         if (!mid) break;
21         if (toLeft(mid, _x, _y)) l = mid;
22         else r = mid;
23     }
24     return l;
25 }
26 int main() {
27     freopen("hahaha.in","r",stdin);
28     freopen("hahaha.out","w",stdout);
29     scanf("%d",&n);
30     for (int i = 1; i <= n; ++ i)
31         scanf("%d",&x[i]);
32     for (int i = 1; i <= n; ++ i)
33         scanf("%d",&y[i]);
34     sort(x + 1, x + n + 1);
35     sort(y + 1, y + n + 1);
36     scanf("%d",&m);
37     while (m --) {
38         int _x, _y;
39         scanf("%d%d",&_x,&_y);
40         printf("%d\n", getcnt(_x, _y));
41     }
42     return 0;
43 }

思路:数学判断+二分答案

测试数据见网盘~

时间: 2024-11-05 06:13:00

济南学习 Day1 T3 pm的相关文章

济南学习 Day1 T2 pm

[问题描述]栈是一种强大的数据结构,它的一种特殊功能是对数组进行排序.例如,借助一个栈,依次将数组 1,3,2 按顺序入栈或出栈,可对其从大到小排序:1 入栈:3 入栈:3 出栈:2 入栈:2 出栈:1 出栈.在上面这个例子中,出栈序列是 3,2,1,因此实现了对数组的排序.遗憾的是,有些时候,仅仅借助一个栈,不能实现对数组的完全排序.例如给定数组 2,1,3,借助一个栈,能获得的字典序最大的出栈序列是 3,1,2:2 入栈:1 入栈:3 入栈:3 出栈:1 出栈:2 出栈.请你借助一个栈,对一

济南学习 Day1 T1 am

题意:给你两个日期,问这两个日期差了多少毫秒 1 #include<cstdio> 2 #include<cstring> 3 #include<ctime> 4 #include<iostream> 5 #define ll long long 6 using namespace std; 7 int mth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 8 ll solve(){ 9 int Y=0,M=0,D

python学习—-day1.计算机基础

python学习-day1.计算机基础 一.计算机系统的硬件组成部分:电脑的三大件:内存.硬盘.cpu 二.编程语言的作用及操作系统和硬件的关系:答:1.编程语言的作用是与计算机沟通,并且可以用编程语言在操作系统上写程序,从而达到开发应用软件的目的2.操作系统是用来管理计算机硬件资源的 三.应用程序->操作系统->硬件:在硬件之上装操作系统,在操作系统上装应用程序1.应用程序是指程序员开发的可运行的软件2.操作系统的目的是用来管理计算机硬件的3.硬件:cpu.硬盘.内存.键盘.鼠标统称为电脑硬

济南学习 Day 5 T3 am

[题目描述] 众所不知,rly现在不会玩国际象棋.但是,作为一个OIer,rly当然做过八皇后问题.在这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在 n*n的棋盘中,摆放n个皇后使它们互相不能攻击到,求不同的解的数量,这就是经典的n皇后问题.现在问题推广n皇后问题,这个问题对你而言实 在是小菜一碟.但是因为上次rly把棋盘弄破了,又拿不出新的,所以rly打算难一点点,问题就是在破的棋盘上的n皇后问题.他想知道......(你们懂的..) 妻子都是相同的 [输入说明] 一行,一个整数N. 接下

济南学习 Day 2 T3 am

[问题描述]m× m的方阵上有n棵葱,你要修一些栅栏把它们围起来.一个栅栏是一段沿着网格建造的封闭图形(即要围成一圈) .各个栅栏之间应该不相交.不重叠且互相不包含.如果你最多修k个栅栏,那么所有栅栏的长度之和最小是多少?[输入格式]第一行三个整数m,k,n.接下来n行每行两个整数x,y代表某棵葱的位置.[输出格式]一行一个整数代表答案.[样例输入 1]6 1 41 34 24 46 4[样例输出 1]18[样例输入 2]6 2 41 34 24 46 4[样例输出 2]16[样例解释]你猜树上

Day1: T3 bfs T4 树形DP

T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min(d[上升],d[下降]); ans=min(2*k+1,d1[]+d2[]); 输出ans..这个地方需要理解: 其余的照bfs模板打即可:

2017 济南集训DAY1.AF

LIST T1 水题(water) T2 梦境(dream) T2 动态规划(dp) T1 水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第j张牌当且仅当xi>=aj并且yi>=bj.(注意牌不能翻转)当然一张牌只能去覆盖最多一张牌,而不能覆盖好多

Python 学习 DAY1

是看这篇文章学习的:http://blog.csdn.net/chenguolinblog/article/details/11661233 貌似我2年前妄想自学,但是老是没下决心...今天一定要正式开始了.. 废话不多说,开始: s1:variables. 1 变量:一个变量就是一个单词,只有一个单一的值 2 练习:设置一个变量my_variable,值设置为10 my_variable=10 3 数据类型有interage , floats , boolean 3种 4 Python是一个区

英语学习Day1

  今天要开始学英语了,我这个人没什么长性,语言这种东西对我来说又是很不擅长的一种技能,那为什么要学英语呢?我要做翻译,也是呵呵了,主要是我想赚钱,这个力量能够支撑我吧,我想.   网上有很多学英语的办法,我没有太多的时间和完整的时间段来做这件事情,所以我想先从听力入手,听和读应该是我这段时间的重点,说和写应该是要放在后面的.   制定以下月度目标:     1.完成30篇VOA慢速听力的听和读,要求能够背诵,并且能够记住里面的单词:     2.坚持完成4个单元的大学英语的学习:     3.