ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

上分准备 VP Codeforces Round #762 (Div. 3) 4题ABCE

2022-07-31 10:01:45  阅读:111  来源: 互联网

标签:ABCE typedef const 762 long int Div include define


 

+00:02 +00:16 +01:08   +02:07
VP 情况  4/8 ABCE ,赛时排名可以到823,什么时候我可以上个青
  • B 本想写个map的二分的,发现自己不会,写了个普普通通的二分
  • C 高精度模拟,一发过了,用个vector将每个数位存起来,从个位开始判断,如果 A_i  的数能加上小于10的正整数大于等于S_j+1  *10  + S_j,(S_j+1 ! = 0),那么就能一次解决两个数位,其余正常匹配,遇到无法进位同时 A_i > S_j 的情况就没有解 ,最后讨论前导0,和S没有匹配完的输出
//  AC one more times

////////////////////////////////////////INCLUDE//////////////////////////////////////////

#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<string.h>
#include <cstring>
#include <complex>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <list>
#include <bitset>
#include <assert.h>
#include <unordered_set>
#include <unordered_map>
#include <iomanip>
#include <random>
#include <iterator>
#include <time.h>

using namespace std;
/////////////////////////////////////////DEFINE//////////////////////////////////////////

#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define inf64 0x3f3f3f3f3f3f3f3f

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long,long long> PLL;

////////////////////////////////////////CONST////////////////////////////////////////////

const int  inf = 0x3f3f3f3f;
const int maxn = 2e6 + 6;
const double eps = 1e-8;
const int mod = 1000000;

///////////////////////////////////////FUNCTION//////////////////////////////////////////

template<typename T>
void init(T q[], int n, T val){   for (int i = 0; i <= n; i++) q[i] = val;  }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
bool cmp(int c, int d) { return c > d; }

LL a,s; 
std::vector<int > d1,d2;
void chuli()
{
    LL ta=a;
    while(ta)
    {
        d1.push_back(ta%10);
        ta/=10;
    }
    ta=s;
    while(ta)
    {
        d2.push_back(ta%10);
        ta/=10;
    }
}
void solve()
{
    d1.clear(),d2.clear();
    cin>>a>>s;
    if(a>s) 
    {
        cout<<-1<<endl; return;
    }
    chuli();
    int len1=d1.size(),len2=d2.size(),j=0, ca=len2-len1;
    vector<int> ans;
    for(int i=0;i<len1;i++)
    {
        int t1=d1[i],t2=d2[j],t3=d2[j+1];
        if(ca&&t1+9>=t3*10+t2&&j<len2&&j+1<len2&&t3!=0)
        {
            int add=t3*10+t2;
            ans.push_back(add-t1);
            j++,j++;
            ca--;
        }
        else if(t1+(t2-t1)<10&&t2>=t1&&j<len2)
        {
            int add=t2-t1;
            ans.push_back(add);
            j++;
        }
        else if(t1>t2)
        {
            cout<<-1<<endl; return;
        }
    }
    if(j!=len2)
    {
        for(int i=len2-1;i>=j;i--)
            cout<<d2[i];
        reverse(ans.begin(),ans.end());
        for(auto it : ans)
            cout<<it;
        cout<<endl;
    }
    else 
    {
        int sz=ans.size();
        while(ans[sz-1]==0&&sz>=1)
            sz--;
        if(sz==0)
        {
            cout<<0<<endl;  return;
        }
        for(int i=sz-1;i>=0;i--)
            cout<<ans[i];
        cout<<endl;
    }

    return;
}

    

    
int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);

    int T;cin>>T;for(int i=1;i<=T;i++)
        solve();    


    return 0;
}

 

 

E 构造贪心下,

每个最小没出现的整数 d ,答案是:

  1. 更小的数 进行操作,使得 0~d-1 都有数字
  2. 数组内所有=d的数 进行+1

用一个数组标记值为i的数有多少个

如何使得进行操作数最少? 如果到了数 i ,这个地方标记数为0,那么就要比他小的数加1,我们用更小的数进行操作使它达到i,使得 MEX= ii+1 时候成立,这里用一个优先队列来维护可以进行操作的数,使得每次操作数最小。当a[i] >=2  ,就将a[i]-1个 i 加入优先队列。也用一个 chengben来记录补上 0~i-1 的坑(原本a[0~i-1] = 0 处),当MEX=i,答案为chengben + a[i] ,如果前面有坑没补上,后面就全输出-1 了

//  AC one more times

////////////////////////////////////////INCLUDE//////////////////////////////////////////

#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<string.h>
#include <cstring>
#include <complex>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <list>
#include <bitset>
#include <assert.h>
#include <unordered_set>
#include <unordered_map>
#include <iomanip>
#include <random>
#include <iterator>
#include <time.h>

using namespace std;
/////////////////////////////////////////DEFINE//////////////////////////////////////////

#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define inf64 0x3f3f3f3f3f3f3f3f

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long,long long> PLL;

////////////////////////////////////////CONST////////////////////////////////////////////

const int  inf = 0x3f3f3f3f;
const int maxn = 2e6 + 6;
const double eps = 1e-8;
const int mod = 1000000;

///////////////////////////////////////FUNCTION//////////////////////////////////////////

template<typename T>
void init(T q[], int n, T val){   for (int i = 0; i <= n; i++) q[i] = val;  }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
bool cmp(int c, int d) { return c > d; }



void solve()
{
    int a[200010],n;
    memset(a,0,sizeof a);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;  cin>>x;
        a[x]++;
    }

    LL chengben=0;
    priority_queue<int,vector<int>,less<int>> q;
    for(int i=0;i<=n;i++)
    {
        if(i==0)
        {
            cout<<a[i]<<" ";
            if(a[0]==0)
            {
                for(int j=1;j<=n;j++)
                    cout<<-1<<" ";
                cout<<endl;return;
            }
            if(a[i]>1)
                for(int j=2;j<=a[i];j++)
                    q.push(i);
        }
        if(i>=1)
        {
            cout<<chengben+a[i]<<" ";
            if(a[i]==0)
            {
                if(q.empty())
                {
                    for(int j=i+1;j<=n;j++)
                        cout<<-1<<" ";
                    cout<<endl;return;
                }
                else
                {
                    chengben+=i-q.top();    q.pop();
                }

            }
            if(a[i]>=1)
                for(int j=2;j<=a[i];j++)
                    q.push(i); 
        }

    }
    cout<<endl;
    return;
}

int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int T;cin>>T;for(int i=1;i<=T;i++)
        solve();    
    return 0;
}

 

标签:ABCE,typedef,const,762,long,int,Div,include,define
来源: https://www.cnblogs.com/magicat/p/16536494.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有