专栏文章
题解:P13752 【MX-X17-T1】Walk,Walk,Walk
P13752题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioa3rhq
- 此快照首次捕获于
- 2025/12/02 15:50 3 个月前
- 此快照最后确认于
- 2025/12/02 15:50 3 个月前
本蒟蒻的第一篇题解
题目传送门
题目传送门
题意
对于n条线和2个点,求从第一个点到第二个点的路程中,最少穿过n条线中多少条线。
思路
我们仔细看题不难发现,如果这两个点在某一条直线两侧,从一个点到另一个点的路程一定穿过这条直线。
也就是说如果一条直线的x/y坐标在两点的x/y坐标范围之内,两点的路径就 一定穿过这条直线
也就是说如果一条直线的x/y坐标在两点的x/y坐标范围之内,两点的路径就 一定穿过这条直线
所以我们只需要遍历两点的x/y坐标范围并记录在此范围内的直线的数量,即可AC
code
CPP#include<bits/stdc++.h>
using namespace std;
long long n,t,k,sx,sy,tx,ty,xl[100001],yl[100001],ans,xsiz=0,ysiz=0;
bool cmp(long long x,long long y){
return x>y;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>t>>k;//输入
if(t==1){
xl[++xsiz]=k;记录平行于x,y轴的直线
}else{
yl[++ysiz]=k;
}
}
sort(yl+1,yl+ysiz+1,cmp);
sort(xl+1,xl+xsiz+1,cmp);//这两行其实没用
cin>>sx>>sy>>tx>>ty;
for(int i=1;i<=ysiz;i++){
if(yl[i]>=sy&&yl[i]<=ty||yl[i]>=ty&&yl[i]<=sy){
ans++;
}
for(int i=1;i<=xsiz;i++){
if(xl[i]>=sx&&xl[i]<=tx||xl[i]>=tx&&xl[i]<=sx){
ans++;
}//如果直线在两点之间,ans就++
}
}cout<<ans;
return 0;
}
```
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...