2 条题解
-
0
一道
挺难的if判断
这题有N种可能 1.
1 2 3 4 5 6 7 l p r
l=1,r=n
这种情况直接输出0
p是多少都无关紧要
if(l==1&&r==n)cout<<0;
2.1 2 3 4 5 6 7 l p r
l=1且r!=n
输出abs(r-p)+1
else if(l==1)cout<<
3. ```language 1 2 3 4 5 6 7 l p r
r=n且l!=1
跟l=1类似
else if(l==n)cout<<abs(l-p)+1
4
1 2 3 4 5 6 7 l p r
p>=r&&p<=l
这个最麻烦
要先求先去l还是r
else if(p>=l&&p<=r)cout<<min(abs(l-p),abs(r-p))+r-l+2;
5
1 2 3 4 5 6 7 l p r
r>p
输出p-l+2
else if(p>r)cout<<p-l+2;
最后是6
1 2 3 4 5 6 7 r l p
r<l
到这里已经不需要if了
else cout<<r-p+2;
最后附上含注释完整版AC代码
注意:本代码已开启防人机抄袭
using namespace std; const int N=1e5+5,INF=0x3f3f3f3f; typedef long long LL; int n,p,l,r; int main() { cin>>n>>p>>l>>r; if(l==1&&r==n)cout<<0;//情况1 else if(l==1)cout<<abs(r-p)+1;//情况2 else if(r==n)cout<<abs(l-p)+1;//情况3 else if(p>=l&&p<=r)cout<<min(abs(l-p),abs(r-p))+r-l+2;//情况4 else if(p>r)cout<<p-l+2;//情况5 else cout<<r-p+2;//情况6 return O;//CE }
-
0
#include #include<stdio.h> #include #include<math.h> #include<string.h> #define ll longlong const int N=1e5+10; const int INT=0x3f3f3f3f; using namespace std; int main() {
int n, pos, l, r; cin >> n >> pos >> l >> r; if (l == 1 && r == n) { cout << 0 << endl; return 0; } if (l == 1) { int time = abs(pos - r) + 1; cout << time << endl; return 0; } if (r == n) { int time = abs(pos - l) + 1; cout << time << endl; return 0; } int option1 = abs(pos - l) + 1 + (r - l) + 1; int option2 = abs(pos - r) + 1 + (r - l) + 1; int minTime = min(option1, option2); cout << minTime << endl; return 0;
}
- 1
信息
- ID
- 2308
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 268
- 已通过
- 64
- 上传者