题解:P13510 [KOI 2025 #1] 远方的卡片

· · 题解

一道水题

首先,读入n和a[i]

    cin >> n;
    for(int i = 1;i <= 2*n;i++){
        cin >> a[i];
    }

接着,从数字1到n开始枚举,定义l为第一个数字 k ,r为第二个数字k,在从1到2*n中,找到l,r。挑选l和r中间的数字的数量(r-l-1),maxn统计最大值,最后输出便可以了

    for(int i = 1;i <= n;i++){
        bool f = 0;
        int l = 0,r = 0;
        for(int j = 1;j <= 2*n;j++){
            if(a[j] == i && f == 0){
                l = j;
                f = 1;
            }else if(a[j] == i && f){
                r = j;
                break;
            }
        }
        maxn = max(maxn,r-l-1);
    }

code

#include<bits/stdc++.h>
using namespace std;
int n,maxn = -1; 
int a[4004];
int main(){
    cin >> n;
    for(int i = 1;i <= 2*n;i++){
        cin >> a[i];
    }
    for(int i = 1;i <= n;i++){
        bool f = 0;
        int l = 0,r = 0;
        for(int j = 1;j <= 2*n;j++){
            if(a[j] == i && f == 0){
                l = j;
                f = 1;
            }else if(a[j] == i && f){
                r = j;
                break;
            }
        }
        maxn = max(maxn,r-l-1);
    }
    cout << maxn;
    return 0;
}