Codeforces Round #673 (Div. 1)

Codeforces Round #673 (Div. 1)

A. k-Amazing Numbers

对于一个k有一个数满足是k-amazing即这个数之间的最大间隔不大于k

#include <bits/stdc++.h>

using namespace std;
const int maxn = 3e5 + 5;
const int INF=0x7f7f7f7f; //2139062143


void solve() {
    
    
    int n;
    cin>>n;
    map<int ,pair<int ,int >>m;
    for (int i = 1; i <=n; ++i) {
    
    
        int x;
        cin>>x;
        if(m.find(x)==m.end()) m[x]=make_pair(i,i);
        else {
    
    
            m[x].second=max(m[x].second,i-m[x].first);
            m[x].first=i;
        }
    }
    vector<int > ans(n+1,INF);
    for(auto x:m){
    
    
        x.second.second=max(x.second.second,n+1-x.second.first);
        ans[x.second.second]=min(ans[x.second.second],x.first);
    }
    int now=INF;
    for (int i = 1; i <=n; ++i) {
    
    
        now=min(now,ans[i]);
        if (now==INF) cout<<"-1 ";
        else cout<<now<<" ";
    }
    cout<<"\n";
}

int main() {
    
    
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
    cin >> _;
    while (_--) {
    
    
        solve();
    }
    return 0;
}

B. Make Them Equal

先把除了1之外的所有数加到1上,在由1分配到其他数;
如果有的数不能整除下标 i 先通过 1 使其变为i的整数倍即可;

#include <bits/stdc++.h>

using namespace std;
const int maxn = 3e5 + 5;
const int INF=0x7f7f7f7f; //2139062143

int num[maxn];

void solve() {
    
    
    int n;
    cin>>n;
    int sum=0;
    for (int i = 1; i <=n; ++i) {
    
    
        cin>>num[i];
        sum+=num[i];
    }
    if(sum%n) cout<<-1<<"\n";
    else{
    
    
        sum/=n;
        cout<<3*(n-1)<<"\n";
        for (int i = 2; i <=n; ++i) {
    
    
            int temp=i-num[i]%i;
            if(temp==i) temp=0;
            cout<<1<<" "<<i<<" "<<temp<<"\n";
            num[1]-=temp;
            num[i]+=temp;
            cout<<i<<" "<<1<<" "<<num[i]/i<<"\n";
            num[1]+=num[i];
            num[i]=0;
        }
        for (int i = 2; i <=n; ++i)
            cout<<1<<" "<<i<<" "<<sum<<"\n",num[i]+=sum,num[1]-=sum;
        /*for (int i = 1; i <=n; ++i) {
            cout<<num[i]<<" ";
        }*/
    }

}

int main() {
    
    
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int _ = 1;
    cin >> _;
    while (_--) {
    
    
        solve();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45436102/article/details/110324348