ACS Day12 模拟赛复盘

· · 个人记录

freopen再出问题,模拟赛遗憾爆零

T1

排序,因为a,b,c \in Z^+,所以第一第二一定是ab,最后一个一定是a+b+c,所以就这么解决。

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

int x[10],tot=0;
map<int,int> mp;

signed main(){

     // freopen("a.in","r",stdin);
     // freopen("a.out","w",stdout);

    for(int i=1;i<=7;i++){
        cin>>x[i];
        tot+=x[i];
    }
    sort(x+1,x+8);
    tot>>=2;
    int a=x[1],b=x[2];
    int c=tot-a-b;

    cout<<a<<" "<<b<<" "<<c;

     // fclose(stdin);
     // fclose(stdout);

    return 0;
}

T2 暴力枚举

就是暴力。

#include<bits/stdc++.h>
#define int long long
#define N 1005
using namespace std;

int n,b[N];
bool check(int x){
    int t[2*N]={0},tmp=x;
    t[x]++;
    for(int i=1;i<n;i++){
        tmp=b[i]-tmp;
        t[tmp]++;
        if(t[tmp]>1 || tmp<=0){
            return 0;
        }
    }
    return 1;
}

signed main(){

    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<n;i++) cin>>b[i];

    int minn=999999999;
    for(int i=1;i<n;i++){
        if(check(i)){
            minn=i;
            break;
        }
    }

    if(minn==999999999){
        cout<<"Not found =(";
        return 0;
    }
    cout<<minn<<" ";
    int tmp=minn;
    for(int i=1;i<n;i++){
        tmp=b[i]-tmp;
        cout<<tmp<<" ";
    }

    return 0;
}

T3 线头法树上贪心算法

T4 糖果均分模型 + 找中位数

聚焦“将每个 a_i 取模 m 后,找最小花费使得通过加减变成同一个数”的问题,以及给出的示例和思路的实现细化。

要点与思路