社区讨论

求助暴力

P9870[NOIP2023] 双序列拓展参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lq588yg1
此快照首次捕获于
2023/12/14 21:19
2 年前
此快照最后确认于
2023/12/14 21:35
2 年前
查看原帖
CPP

#include<bits/stdc++.h>

using namespace std;
const int N = 5005;

int c, n, m, q, cs;
vector<int>a, pr;
vector<int>b, pg;
int f[N][N];

void calc(){
    cs = 0;
    if(a[0] > b[0]) swap(a, b), swap(n, m), cs = 1;
    //cout<<endl;
    //for(int i=1;i<=n;++i) cout<<a[i-1]<<" "; cout << endl;
    //for(int i=1;i<=m;++i) cout << b[i-1] << " "; cout << endl;
    memset(f, 0, sizeof f);
    f[0][1]=1;
    for(int i=1;i<=m;++i){
        for(int j = 1; j <= n; ++j) {
            if(f[i-1][j]) {
                for(int k=j;k<=n;++k)
                    if(b[i-1]>a[k-1]) f[i][k]=1;
                    else break;
            }
        }
    }
    if(cs) swap(n, m);
}
int main(){
  //  freopen("expand.in","r",stdin);
   // freopen("expand.out","w",stdout);
    cin >> c >> n >> m >> q;
    for(int i=1,x;i<=n;++i)cin >> x, a.emplace_back(x);
    for(int j=1,x;j<=m;++j)cin >> x, b.emplace_back(x);
    pr = a, pg = b;
    calc();
    cout<<(f[m][n]>0);
    for(int i=1;i<=q;++i){
        int kx, ky;
        a = pr, b = pg;
        cin>>kx>>ky;
        for(int j=1,x,y;j<=kx;++j) cin >> x >> y, a[x-1]=y;
        for(int j=1,x,y;j<=ky;++j) cin >> x >> y, b[x-1]=y;
        calc();
        cout<<(f[m][n]>0);
    }
    return 0;
}

考场写的暴力,但是官方数据第五个点错了,不太清楚为什么。

回复

0 条回复,欢迎继续交流。

正在加载回复...