9.11 codeforces

冬天的睡袋發表於2024-09-11

A. Make a Square
n的範圍不超過2*10的9次方,那麼最大的i是44722,從大到小開始,如果在n中找到i的平方,那麼說明存在這個數的平方break即可

#include <bits/stdc++.h>

#define  int long long
using namespace std;
int v[1008611];
int prefix[1008611];
int32_t main( )
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string s1;
    cin>>s1;
    int aa=0;
    for(int i=44722;i>=1;i--){
        int pd=1;
        string s= to_string(i*i);
        if(s.length()<=s1.length()) {
            int j = 0;
            for (auto c: s1) {
                if (c == s[j]) {
                    j++;
                }
            }
            if (j == s.length()) {
                cout << s1.length() - s.length();
                aa = 1;
                break;
            }
        }
    }
    if(aa==0)cout<<-1;
  return 0;

}

A. Load Balancing
我們要讓整個陣列的最大最小值差不超過1,我們可以先找平均值,然後把多餘平均值的數逐一分配給前面的數

#include <bits/stdc++.h>

#define int long long

using namespace std;

int v[1008611];

int32_t main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin>>n;
    int sum=0;

    for(int i=1;i<=n;i++){
        int a;
        cin>>a;
        v[i]=a;
        sum+=a;
    }
    int s=sum;
        s/=n;
        //注意如果不能整除說明最後分配出來的會有多出來的情況
        if(sum%n)s++;
        int p=0;
        int q=0;
        int ans=0;
        int pd=0;
        for (int i = 1; i <=n; ++i) {
            if(v[i]<s-1)p+=s-1-v[i];
            if(v[i]>s)q+=v[i]-s;
        }
        // cout<<q<<p<<'\n';

        cout<<max(q,p);
}

C. Match Points
有點貪心加雙指標的意思
我們要想使得點數最多,那麼n/2就是最多的點對數,我們先對陣列進行排列,讓一個指標l從n開始,一個r從n/2開始
如果符合條件那麼l--,整個過程r一直減r--;


#include <bits/stdc++.h>

#define  int long long

using namespace std;

int v[1008611];
int prefix[1008611];

int32_t main( )
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,m;
    cin>>n>>m;
    for (int i = 1; i <=n ; ++i) {
        cin>>v[i];
    }
    sort(v+1,v+1+n);
    int ans=0;
    int l=n,r=n/2;
    while(r>=1){
            if(abs(v[l]-v[r])>=m) {
                ans++;
                l--;
            }
               r--;
            }
    
    cout<<ans;


  return 0;

}