2025 10 08 模拟赛游记

· · 生活·游记

2025 10 08 模拟赛游记

这次模拟赛有五题,难度偏高(对我来说)。

第一题:牛奶桶(blist)

题目大意:

主要算法:

正解:

#include<bits/stdc++.h>
using namespace std;

const int N = 1005;
int n, ans, a[N];

int main() {
    cin >> n;
    for (int i = 1, s, t, b; i <= n; i++) {
        cin >> s >> t >> b;
        a[s] += b;
        a[t + 1] -= b;
    }
    for (int i = 1; i <= 1000; i++) {
        a[i] += a[i - 1];
        ans = max(a[i], ans);
    }
    cout << ans;
    return 0;
}

第二题:井字棋(tttt)

题目大意:

主要算法:

第三题:往返运奶(backforth)

题目大意:

正解:

#include <bits/stdc++.h>
using namespace std;
const int N=2e3+5;
int n[25],n1[25],ans;
int v[105],v1[105],vv[N][N];
int cnt,cnt1;
void dfs(int a,int d,int cmt,int cmt1){
    if(cmt>2||cmt1>2){
        return ;
    }
    if(cmt==2&&cmt1==2){
        if(!vv[a][d]){
            vv[a][d]=1;
            ans++;
        }
        return ;
    }
    for(int i=1;i<=cnt;i++){
        if(!v[n[i]])continue;
        v[n[i]]--;
        v1[n[i]]++;
        dfs(a-n[i],d+n[i],cmt+1,cmt1);
        v1[n[i]]--;
        v[n[i]]++;
    }
    for(int i=1;i<=cnt1;i++){
        if(!v1[n1[i]])continue;
        v1[n1[i]]--;
        v[n1[i]]++;
        dfs(a+n1[i],d-n1[i],cmt,cmt1+1);
        v1[n1[i]]++;
        v[n1[i]]--;
    }
}
int main(){
    for(int i=1,x;i<=10;i++){
        cin>>x;
        if(!v[x]){
            n[++cnt]=x;
            n1[++cnt1]=x;
        }
        v[x]++;
    }
    for(int i=1,x;i<=10;i++){
        cin>>x;
        if(!v1[x]){
            n[++cnt]=x;
            n1[++cnt1]=x;
        }
        v1[x]++;
    }
    dfs(1000,1000,0,0);
    cout<<ans;
    return 0;
}

第四题:挤奶顺序(milkorder)

题目大意:

基本算法:

正解:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using ld=long double;
const int N=105;
ll n,m,k;
ll l[N],p[N],a[N];
bool f;

int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=m;i++){
        cin>>l[i];
        if(l[i]==1)f=1;
    }
    for(int i=1;i<=k;i++){
        ll x,y;
        cin>>x>>y;
        p[x]=y;
        a[y]=x;
    }
    if(p[1]){
        cout<<p[1];
    }else if(f){
            for(int i=1,j=1;i<=n&&j<=m;){
                if(p[l[j]]){
                    i=p[l[j++]]+1;
                }else if(!a[i]){
                    p[l[j]]=i;
                    a[i++]=l[j++];
                }else i++;
            }
            cout<<p[1];
    }else{
        for(int i=n,j=m;j&&i;){
            if(p[l[j]]){
                    i=p[l[j--]]-1;
                }else if(!a[i]){
                    p[l[j]]=i;
                    a[i--]=l[j--];
                }else i--;
        }
        for(int i=1;i<=n;i++){
            if(!a[i]){
                cout<<i;
                break;
            }
        }
    }

    return 0;
}

第五题:家谱(family)

题目大意:

基本算法: