【NOIP2019模拟赛19.8.22】

#题目
A【NOIP2019模拟赛19.8.22】指引
B【NOIP2019模拟赛19.8.22】碎片
C【NOIP2019模拟赛19.8.22】寻梦

A. 【NOIP2019模拟赛19.8.22】指引 

考试时想正解想了很久,最后还是打了暴力,95的暴力分真良心,,,

正解用到了神奇的set,把入口和旅客的坐标合在一起按照横坐标从大到小排序,然后从头开始遍历,如果是入口坐标就把纵坐标加入set,如果是旅客坐标就取出set中最小的那个>=当前旅客纵坐标的入口纵坐标,set刚好有这个功能,至于为什么,其实就是一种贪心策略,更大的纵坐标一定更有机会被后面的旅客选中,所以我们每次尽量把大的纵坐标留给后面

#include<bits/stdc++.h>
using namespace std;
int Num,n;
struct node{
	int x,y,ip;
}p[200100];
set<int>q;
bool cmpy(node a,node b){
	return a.x>b.x;
}
int main(){
//	freopen("guide.in","r",stdin);
//	freopen("guide.out","w",stdout);
	scanf("%d%d",&Num,&n);
	for(int i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y),p[i].ip=1;
	for(int i=1;i<=n;i++)scanf("%d%d",&p[i+n].x,&p[i+n].y),p[i+n].ip=2;
	sort(p+1,p+2*n+1,cmpy);
	int ans=0;
//	for(int i=1;i<=2*n;i++)cout<<p[i].ip<<' '<<p[i].x<<' '<<p[i].y<<endl;
	set<int>::iterator it;
	for(int i=1;i<=2*n;i++){
		if(p[i].ip==2)q.insert(p[i].y);
		else if(q.size()){
			if((it=q.lower_bound(p[i].y))!=q.end()){
				q.erase(q.lower_bound(p[i].y));
				ans++;
			}
		}
	}
	printf("%d",ans);
	return 0;
}

B. 【NOIP2019模拟赛19.8.21】失意

考试时猜了个结论,把字母转换成数字,求每一横排、每一竖列的和,如果和相等就可以把他们配对的,最后判断有没有落单的,考场打完代码居然过掉了全部样例还是很惊讶的,但心里还是觉得可能对于有些情况我的结论是错的,但还是赌了一把(只是觉得这道题暴力太难打了,,)居然拿了95,被卡掉的一个点刚好就是我那个结论的bug。

看了正解觉得真麻烦,,就在自己的代码上根据特殊情况改一改,就是遇到我结论处理不了的情况就爆搜一下。

既然不是正解那我还是不发代码了,,,

C. 【NOIP2019模拟赛19.8.21】孤独

考试时完全没有思路,就写了个random_shuffle混了14分

留坑,,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值