觉得代码写得挺好的,放上来记录一下
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;
}
核心部分是一个动态规划的状态转移方程