Codeforces Round #587 (Div. 3) ABCD

这篇博客介绍了Codeforces Round #587 (Div. 3)的比赛题目,包括Problem A到Problem E的解题思路。Problem A要求将字符串转化为每两个字符间交替出现的'a'和'b';Problem B涉及排序;Problem C通过离散化处理点集,使用二维数组记录黑色区间;Problem D利用区间覆盖和最大公约数求解;Problem E暂未给出解题详情,但作者承诺后续会补充。
摘要由CSDN通过智能技术生成

题目传送门(contest1216)


Problem A

变成每两个一a一b

#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;i<b;i++)
#define debug(x) printf("---- %s ----\n",#x)

const int N = 2e5+5;
char s[N];

int main()
{
    int n;
    scanf("%d",&n);
    scanf("%s",s+1);
    int ans = 0;
    for (int i=1;i<=n;i+=2){
        if (s[i]==s[i+1]){
            ans++;
            s[i+1] = s[i]=='a'?'b':'a';
        }
    }
    printf("%d\n",ans);
    printf("%s",s+1);
    return 0;
}

Problem B

排个序

#include<bits/stdc++.h>
     
using namespace std;
     
#define ll long long
#define for0(i,a,b) for (int i=a;i<b;i++)
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define fi first
#define se second
#define pb push_back
#define debug(x) printf("---- %s ----\n",#x)
     
const int N = 1e3+5;
     
struct node
{
    int val,id;
    bool operator < (const node& a)const{
        return val > a.val;
    }
}a[N];
    
int main()
{
    int n;
    scanf("%d",&n);
    ll ans = 0;
    for1(i,1,n) scanf("%d",&a[i].val),a[i].id = i;
    sort(a+1,a+1+n);
    for1(i,1,n){
        ans += 1LL*(i-1)*a[i].val + 1;
    }
    printf("%I64d\n",ans);
    bool flag = true;
    for1(i,1,n){
        if (flag) flag = false;
        else printf(" ");
        printf("%d",a[i].id);
    }
    puts("");
    return 0;
}

Problem C

点很少,离散化一下,而后搞个二维数组标记黑色区间,can[i][j]表示的是左下角为[i,j],右上角为[i+1,j+1]的这一个格子是否被覆盖过。反正区间问题就注意覆盖的是区间把。

#include<bits/stdc++.h>
#include<unordered_map>
     
using namespace std;
     
#define ll long long
#define for0(i,a,b) for (int i=a;i<b;i++)
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define fi first
#define se second
#define pb push_back
#define debug(x) printf("---- %s ----\n",#x)
     
const int N = 1e5+5;
     
unordered_map<int,int>mp;
int a[20];
     
bool can[30][30];
     
int main()
{
    int x1,y1,x2,y2;
    int x3,y3,x4,y4;
    int x5,y5,x6,y6;
     
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    a[0] = x1,a[1] = y1,a[2] = x2,a[3] = y2;
    scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
    a[4] = x3,a[5] = y3,a[6] = x4,a[7] = y4;
    scanf("%d %d %d %d",&x5,&y5,&x6,&y6);
    a[8] = x5,a[9] = y5,a[10] = x6,a[11] = y6;
     
    sort(a,a+12);
    int cnt = unique(a,a+12) - a;
    for0(i,0,cnt) mp[a[i]] = i+1;//,printf("mp[%d] = %d\n",a[i],mp[a[i]]);
     
    memset(can,true,sizeof can);
     
    for1(i,mp[x3]+1,mp[x4])
        for1(j,mp[y3]+1,mp[y4])
            can[i][j] = false;//,printf("[%d,%d] x\n",i,j);
    for1(i,mp[x5]+1,mp[x6])
        for1(j,mp[y5]+1,mp[y6])
            can[i][j] = false;//,printf("[%d,%d] x\n",i,j);
    bool flag = false;
     
    for1(i,mp[x1]+1,mp[x2])
        for1(j,mp[y1]+1,mp[y2]){
            //printf("[%d,%d] check\n",i,j);
            if (can[i][j]) flag = true;
        }
     
    printf("%s\n",flag?"YES":"NO");
    return 0;
}

Problem D

比赛的时候求一下所有数和最大数的差距,求这几个数的gcd,然后求和 :差距/gcd

反正是蒙的,你说有这么个结论就有吧。

#include<bits/stdc++.h>
     
using namespace std;
     
#define ll long long
#define for0(i,a,b) for (int i=a;i<b;i++)
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define fi first
#define se second
#define pb push_back
#define debug(x) printf("---- %s ----\n",#x)
     
const int N = 2e5+5;
     
int a[N],b[N];
     
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
     
int main()
{
    int n;
    int maxx = -1;
    scanf("%d",&n);
    for1(i,1,n) scanf("%d",a+i),maxx = max(maxx,a[i]);
    for1(i,1,n) b[i] = maxx-a[i];
     
    int GCD = gcd(b[1],b[2]);
     
    for1(i,3,n) GCD = gcd(GCD,b[i]);
     
    ll ans = 0;
     
    for1(i,1,n){
        ans += 1LL*b[i]/GCD;
    }
     
    printf("%I64d %d\n",ans,GCD);
     
    return 0;
}

Problem E

还没补。应该会补的。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值