CF - 사고력 - div2-564-C. Nauuo and Cards
10889 단어 CodeForces사유좋은 제목
If that’s not possible, the best choice is to play several empty cards in a row, then play from 1 to n. For a card i, suppose that it is in the pi-th position in the pile (pi=0 if it is in the hand), you have to play at least pi−i+1 empty cards. So the answer will be max{pi−i+1+n}.
My Thoughts: 문제풀이와 결합하여 자신의 이해를 이야기해 보세요.왜 1이 b에 있거나 b에 있지 않은 것으로 나뉘어야 합니까? 왜냐하면 1이 b에 있을 경우 구성될 수 있기 때문입니다...하나, 둘, 셋, 이럴 때는 몇 가지 절차를 생략할 수 있다.기타 상황.왜 이렇습니까? 만약에 1이 이 특수한 조건(1이 b안에 없는 것 포함)을 만족시키지 못하면 모든 p[i]를 i의 앞(p[i]n이 순환을 벗어나면 답을 출력한다.
#include
#define per(i,a,b) for(int i = (a);i <= (b);++i)
#define rep(i,a,b) for(int i = (a);i >= (b);--i)
using namespace std;
const int maxn = 2e5;
int a[maxn+10],b[maxn+10];
int p[maxn+10];
int n = 0;
void solve(){
/*
, 。
1 b b , 1 b 。。。。。1 2 3,
。 。 , 1 ( 1 b ),
p[i] i (p[i] < i), max(p[i]-i+1), 1-n,
, i ,i a , +n; ,
b 1 。
: b , ( 1) 。
。 1 b
1 b , , 。。。。。1 2 3
, p[j] <= j - (i+1), j ,
, j > n , 。
*/
if(p[1]){
for(int i = 1;p[i] == p[1] + i - 1;++i){
if(p[i] == n){
int j = 0;
for(j = i+1;j <= n && p[j] <= j - (i+1);++j);
if(j > n){
printf("%d
",n-i);
return ;
}
}
}
}
int ans = 0;
per(i,1,n){
ans = max(ans,p[i]-i+1 + n);
}
printf("%d
",ans);
}
int main(){
while(~scanf("%d",&n)){
memset(p,0,sizeof(p));
per(i,1,n){
scanf("%d",&a[i]);
}
per(i,1,n){
scanf("%d",&b[i]);
p[b[i]] = i;
}
solve();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문제 풀이 보고서 의 CodeForces 91B QueueOtherwise, print the i-th walrus's displeasure: the number of other walruses that stand between him and the furthest fro...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.