CCF记录2020

这篇博客分享了作者在编程中对于代码简洁性和效率的追求,通过两个实例展示了如何利用简单的数据结构解决问题,避免复杂的优先队列。在第一个例子中,作者巧妙地用三个变量处理了监测点的排序和距离计算。第二个例子涉及动态规划,通过遍历和计数,确定点在特定区域内的行为。博客强调理解问题和选择合适的数据结构的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

觉得代码写得挺好的,放上来记录一下
2020.01

#include<bits/stdc++.h>
#define inf 0x7fffffff 
using namespace std;

/*
心得,尽量用简单一点的数据结构,不要乱搞 
*/

int main() {
	int n,x,y;//数量,检测者位置 
	cin>>n>>x>>y;
	
	int p1=-1,p2=-1,p3=-1;//存储三个监测点的序号
	int d1=inf,d2=inf,d3=inf;//存储三个监测点对应的距离 
	int xx,yy;//存储监测点坐标 
	
	for(int i=0;i<n;i++) {
	cin>>xx>>yy;
	int d=(x-xx)*(x-xx)+(y-yy)*(y-yy);
	if(d<d1) {
		p3=p2;
		d3=d2;
		d2=d1;
		p2=p1;
		d1=d;
		p1=i;
		}	
	else if(d<d2) {
		p3=p2;
		d3=d2;
		d2=d;
		p2=i;
	}
	else if(d<d3) {
		d3=d;
		p3=i;
	}
	}
	
	cout<<p1+1<<endl<<p2+1<<endl<<p3+1;
	return 0;
} 

我觉得精彩的地方是三个数字的大小和序号顺序处理得非常漂亮,三个变量解决,可以依靠输入顺序来保证,d1<d2<d3,并且p1<p2<p3
比优先队列强非常多
我优先队列很菜,不打算用这些不熟悉的复杂数据结构

2020.02
这道题是我自己做出来的,感觉很漂亮,记录一下

#include<bits/stdc++.h>
using namespace std;

/*
刷题小记录:
WA,但是发现代码没问题 
要仔细看代码,因为有可能是漏了测试的提示输出了 
*/

int main() {
	int n,k,t,xl,yd,xr,yu;
	cin>>n>>k>>t>>xl>>yd>>xr>>yu;
	
	int x,y;//每一个坐标点
	int res1=0,res2=0;//经过和逗留 
	for(int i=0;i<n;i++) {
		
		
		int innum=0;//在区域中点的个数 
		int max=0;//记录最长连续个数 
		for(int j=0;j<t;j++) {//循环处理每一个人的每一组数据 
			cin>>x>>y;
			
			if(x>=xl&&x<=xr&&y>=yd&&y<=yu)  innum++;
			else innum=0;
			
			max=max>innum?max:innum;
			
		}
		
		if(max>0&&max<k) res1++;
		else if(max>=k) 
		{
		res2++;
		res1++;
		} 
		
	}
	cout<<res1<<endl<<res2;
	return 0;
}

核心部分是一个动态规划的状态转移方程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值