首页 > 其他分享 >2023/2/22 模拟赛

2023/2/22 模拟赛

时间:2023-02-23 22:34:13浏览次数:42  
标签:22 int 题解 clear 2023 scanf 模拟 lld

本场题目确实逆天,前三题赛时无人切,最高分不过一百左右。仍然是一如既往的菜,又爆零了,什么时候才能走出这个圈啊……

\(T1:Polygon\)
image
考场上一眼计算几何,直接毙掉不做。考完后发现很简单……
正解方法确实抽象……首先,把输入的整点分为 \((奇,奇)\),\((奇,偶)\),\((偶,偶)\),\((偶,奇)\),这四种类型的点。考虑到只需输出 \(\lfloor \frac{n}{10}\rfloor\),个点,相对来说不多。又因为是凸多边形,因此考虑按照点两个坐标的奇偶性配对,使得两点的中点为整点,输出即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e6;
int n,T;
vector<pair<int,pair<int,int> > > ty1,ty2,ty3,ty4;
map<pair<int,int>,bool> m;
signed main(){
	scanf("%lld",&T);
	while(T--){
		ty1.clear(),ty2.clear(),ty3.clear(),ty4.clear();
		bool flag = 0;
		scanf("%lld",&n);
		for(int i = 1; i <= n; i++){
			int u,v;
			scanf("%lld%lld",&u,&v);
			if(abs(u) % 2 == 1){
				if(abs(v) % 2 == 1)ty1.push_back(make_pair(i,make_pair(u,v)));
				else ty2.push_back(make_pair(i,make_pair(u,v)));
			}
			else{
				if(abs(v) % 2 == 1)ty3.push_back(make_pair(i,make_pair(u,v)));
				else ty4.push_back(make_pair(i,make_pair(u,v)));
			}
		}
		int cnt = 0;
		for(int i = 0; i < ty1.size(); i++){
			int x1 = ty1[i].second.first,y1 = ty1[i].second.second;
			for(int j = i + 1; j < ty1.size(); j++){
				int x2 = ty1[j].second.first,y2 = ty1[j].second.second;
				if(abs(ty1[i].first - ty1[j].first) == 1)continue;
				int x3 = (x1 + x2) / 2,y3 = (y1 + y2) / 2;
				if(m.find(make_pair(x3,y3)) != m.end())continue;
				m[make_pair(x3,y3)] = 1;
				printf("%lld %lld\n",x3,y3);
				++cnt;
				if(cnt == n / 10){
					flag = 1;
					break;
				}
			}
			if(flag)break;
		}
		if(flag)continue;
		for(int i = 0; i < ty2.size(); i++){
			int x1 = ty2[i].second.first,y1 = ty2[i].second.second;
			for(int j = i + 1; j < ty2.size(); j++){
				int x2 = ty2[j].second.first,y2 = ty2[j].second.second;
				if(abs(ty2[i].first - ty2[j].first) == 1)continue;
				int x3 = (x1 + x2) / 2,y3 = (y1 + y2) / 2;
				if(m.find(make_pair(x3,y3)) != m.end())continue;
				m[make_pair(x3,y3)] = 1;
				printf("%lld %lld\n",x3,y3);
				++cnt;
				if(cnt == n / 10){
					flag = 1;
					break;
				}
			}
			if(flag)break;
		}
		if(flag)continue;
		for(int i = 0; i < ty3.size(); i++){
			int x1 = ty3[i].second.first,y1 = ty3[i].second.second;
			for(int j = i + 1; j < ty3.size(); j++){
				int x2 = ty3[j].second.first,y2 = ty3[j].second.second;
				if(abs(ty3[i].first - ty3[j].first) == 1)continue;
				int x3 = (x1 + x2) / 2,y3 = (y1 + y2) / 2;
				if(m.find(make_pair(x3,y3)) != m.end())continue;
				m[make_pair(x3,y3)] = 1;
				printf("%lld %lld\n",x3,y3);
				++cnt;
				if(cnt == n / 10){
					flag = 1;
					break;
				}
			}
			if(flag)break;
		}
		if(flag)continue;
		for(int i = 0; i < ty4.size(); i++){
			int x1 = ty4[i].second.first,y1 = ty4[i].second.second;
			for(int j = i + 1; j < ty4.size(); j++){
				int x2 = ty4[j].second.first,y2 = ty4[j].second.second;
				if(abs(ty4[i].first - ty4[j].first) == 1)continue;
				int x3 = (x1 + x2) / 2,y3 = (y1 + y2) / 2;
				if(m.find(make_pair(x3,y3)) != m.end())continue;
				m[make_pair(x3,y3)] = 1;
				printf("%lld %lld\n",x3,y3);
				++cnt;
				if(cnt == n / 10){
					flag = 1;
					break;
				}
			}
			if(flag)break;
		}
	}
}
//1 
//11 
//0 0 
//1 1 
//2 3 
//2 5 
//0 10 
//-2 10 
//-5 9 
//-8 7 
//-8 4 
//-6 1 
//-2 0 

另一种方法还没有实践,不过感性理解上是正确的。对于一个点,可以通过余弦定理判断它和左右两个点形成的角是不是钝角,如果是钝角的话就可以向多边形内的方向进行扩展,也能得到合法的点。应该是对的吧。

\(T2\)
image
期望 \(DP\)……纯纯不会。
image
image

题解先放这,看看以后能不能看懂。

\(T3:\)
image

这个数据结构……过于逆天,还是放个题解先,看以后能不能懂。
image

标签:22,int,题解,clear,2023,scanf,模拟,lld
From: https://www.cnblogs.com/CZ-9/p/17149698.html

相关文章

  • 2023/02/23刷题
    B.PleasantPairs链接B.PleasantPairs我们通过控制i来枚举ai*t-j的方法来确定有多少个满足条件的结果.用一个res来记录最后有多少满足条件的结果就可以了#include<......
  • 2023/2/23号周四总结
     今天上午醒了吃了早饭,在宿舍呆到9.30,去上工程数学课,上完了吃午饭,下午上体育课,体育课有考试,考试十个投篮我进了七个,下课之后回到寝室,看了一些安卓方面的视频,晚上吃完饭后......
  • 2023.2.23每日总结
     今天学习了Androidstudio关于EditText标签的运用EditText标签1.android:hint输入提示2.android:textColorHint输入提示文字的颜色3.android:inputType输入类型I......
  • 2023年2月23号
    packageqsap;publicclassqsap{Stringid;Stringname;Stringplace;publicqsap(Stringid,Stringname,Stringplace){this.id=id;......
  • 2023年2月23日学习总结
    今天继续学习AndroidApp的基础内容学习了AndroidStudio软件的一些功能和项目目录文件的说明,学习了其中的java文件,xml文件,清单注册文件和一些资源文件中一些基础的内容......
  • 2023年2.23软工日报
    今天上了工程数学的课,工程数学挺难的,听不懂,很多高数线代都忘了,上课听不上,打算周六补救一下,复习复习高数和线代。今天打了60行代码,学习了学习了安卓开发。MainActivity.ja......
  • 《PROMOTING COOPERATION IN MULTI-AGENT REINFORCEMENT LEARNING VIA MUTUAL HELP》
    通过互相帮助促进多智能体强化学习中的合作总结该篇文章主要是提出了一个新的多智能体强化学习算法,目的是为了提高合作程度和总社会奖励。具体实现基于传统Actor-Critic......
  • 每日总结2023/2/23
    今天继续进行安卓的学习  用户名文本框  <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutandroid:layout_width="match_parent"android:layout_h......
  • 复现:西湖论剑2022
    mp3用MP3stego无密码解密mp3,得到txt   用binwalk分析mp3,发现有png,用foremost提取 用zsteg分析png,发现藏有zip,提取出来   zip加密了一个47.txt,用前面得......
  • 2023.2.23AcWing蓝桥杯集训·每日一题
    今天练习的思维为递推。AcWing3777.砖块题目描述\(n\)个砖块排成一排,从左到右编号依次为\(1∼n\)。每个砖块要么是黑色的,要么是白色的。现在你可以进行以下操作若......