C - Choose Elements
用了简单递归T了17个点,求思路
我的代码:
#include<iostream>
#include<cmath>
using namespace std;
int n,k,flag=0;
int a[200002],b[200002],p[200002][5];
void s(int x,int y){
if(x==n) {
flag=1;return;
}
if(p[x][y]<=k){
if(y==3){
s(x+1,2);
s(x+1,4);
}
else if(y==4){
s(x+1,1);
s(x+1,3);
}
else{
s(x+1,y);
s(x+1,y+2);
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n-1;i++){
p[i][1]=abs(a[i]-a[i+1]);
p[i][2]=abs(b[i]-b[i+1]);
p[i][3]=abs(a[i]-b[i+1]);
p[i][4]=abs(b[i]-a[i+1]);
}
for(int i=1;i<=4;i++){
s(1,i);
if(flag){
cout<<"Yes";return 0;
}
}
cout<<"No";
return 0;
}