Codeforces Round #677 (Div. 3)A-G题解

Codeforces 题解 (不断更新,一起上分) 目录 Educational Codeforces Round 45 (Rated for Div. 2) Educational Codeforces Round 45 (Rated for Div. 2) 题目:A. Commentary Boxes题解 题目:B Micro-World 题解 题目:C Bracket Sequences Concatenation Problem 题解 题目:D Graph And Its Complement 题解 题目:E Po... 阅读详情

Codeforces Round #677 (Div. 3)A-G题解
比赛链接:https://codeforces.ml/contest/1433/

A题
水,施行

题意为给定一个1到9999的每一位上数字相同的整数x,现在按照一定规则报数,问报到x的时候,总共报了多少位的数字。
报数规则为从1,11,111,1111到2,22,222,2222…到9,99,999,9999。

注意到我们需要关注的只是x是由哪个数字构成的,以及x有几位。
假设x是由若干个y构成的,对于任意的数字比如1,喊完1,11,111,1111总共要报10位数字。因此报到y之前总共要报10(y-1)位,之后再看当前的x要报几次,1,2,3,4依次加上去就是了。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int x;
        cin>>x;
        int ans=10*(x%10-1);
        int cas=0;
        while(x)
        {
            cas++;
            ans+=cas;
            x/=10;
        }
        printf("%d\n",ans);
    }
}

B题
贪心,思维

题意为给定一个01数列a[],每次操作我们可以选择一个连续的1区间,把他们整体左移或者整体右移一个位置,询问最少要多少次操作可以使得所有的1都在一个连续的区间。

注意到对于所有1的初始位置中,最左侧和最右侧的下标位置构成的区间,对于这区间内的0,我们每次操作最多并且必然可以(操作最左侧或者最右侧的连续1区间即可)使得它们减少1。执行此贪心过程的话我们的最少操作次数就是这段区间内0的个数了。
统计即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

bool flag[60];

int32_t main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int pre=-1,ans=0;//pre标记上一段连续1区间的右侧位置
        for(int i=1;i<=n;i++)
        {
            cin>>flag[i];
            if(flag[i]&&!flag[i-1]&&pre!=-1)//记录连续1区间之间的0的个数,pre=-1的时候代表是最左侧的0区间不需要计算进去
            {//flag[i]=1,flag[i-1]为0,正好是连续0区间到连续1区间的分界处
                ans+=i-pre;//两个位置下标相减,即为这一段连续0区间的长度
                pre=-1;
            }
            if(!flag[i]&&flag[i-1]) pre=i;
        }
        cout<<ans<<endl;
    }
}

C题
贪心,构造

题意为有n条鱼,排成一排,每条鱼有一个初始的力量值。我们需要选定一条鱼,他每次可以吃掉自己左边或者右边的一条鱼,并且每吃掉一条鱼后,自己的力量值+1。询问是否存在这样一条鱼,可以把所有的其他鱼吃掉,输出位置下标。

首先想一下不存在这样的鱼的情况。那就是所有鱼的初始力量都相同时,没有鱼可以吃掉其他鱼。
那么当不是所有鱼的初始力量值都相同的时候,我们必定可以找到一个初始的最大力量值,并且拥有这个最大力量值的所有鱼当中,必定存在一条鱼的周围有比他力量值小的鱼(否则就是所有鱼初始力量值都相等的情况了)。我们选定这样一条初始为最大力量值,周围有比他力量值小的鱼,吃掉旁边这条鱼后力量值+1,便成为了所有鱼中严格拥有最大力量值的唯一一条鱼,任意吃掉其他鱼即可。

因此我们只需要判断是否有这样一条初始为最大力量值,周围有比他力量值小的鱼即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const ll maxn=3e5+7;

int num[maxn];

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int M=0;//所有初始值中的最大值
        for(int i=1;i<=n;i++)
        {
            cin>>num[i];
            M=max(M,num[i]);
        }
        int tar=-1;//寻找答案位置
        for(int i=1;i<=n;i++)
        {
            if(num[i]==M)//值要与初始最大值相同
            {
                if(i>1&&num[i-1]!=M) tar=i;//与左侧或者右侧的值不同的位置,均满足要求,输出任意一个
                if(i+1<=n&&num[i+1]!=M) tar=i;
            }
        }
        cout<<tar<<endl;
    }
}

D题
构造

题意为给定n个点,你需要构造n-1条边,把这n个点连接成一个连通图。但是每个点都有一个标记值,标记值相同的点不能用某条边直接连接,只能间接连通。询问是否有满足要求的构造方法。

思考过程如上题,首先无法构造的情况,所有点的标记值都相同,我们无法构造任何边,故此情况下不存在满足要求的构造方法。
那么当并不是所有点的标记值都相同的情况下,必然存在两个下标的点x和y,他们的标记值是不同的。那么我们把所有与x点标记值不同的点(包括y)都与x连接起来,那么就只剩下标记值与x相同的点没有连接进来了,我们将这些点与y点连接起来即可。便能构造出满足要求的连通图。

按照以上思路构造即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        vector<ll>num(n);
        for(auto &x:num) cin>>x;
        int tar=-1;
        for(int i=1;i<n;i++)
            if(num[i]!=num[i-1])//寻找是否有标记值不同的两个点
            {
                tar=i;
                break;
            }
        if(tar==-1) cout<<"NO"<<endl;//所有点标记值相同,无法构造任何边
        else
        {
            cout<<"YES"<<endl;
            for(int i=0;i<n;i++)
            {
                if(i!=tar-1)
                {
                    if(num[i]!=num[tar-1]) cout<<tar<<' '<<i+1<<endl;//如果标记值与tar-1下标点的值不同,则连接到tar-1点上
                    else cout<<tar+1<<' '<<i+1<<endl;//如果与tar-1点的标记值相同,则连接到tar点上,tar点与tar-1点标记值不同固必定符合要求
                }
            }
        }
    }
}

E题
组合数学

题意为给定n个人,标记为1-n,n为偶数。现在需要你将这n个人分为人数相同的两组,每组都给定一个排列顺序,询问总共有多少种不同的分法。其中排列[1,2,3,4]和[2,3,4,1]和[3,4,1,2]和[4,1,2,3]这样循环相同的排列被认为是相同的排列方式。

首先很容易想到的,分为两组必定要计算组合数C(n/2,n),然后A,B和B,A两种方式重复,再除以2。接着需要考虑的就是两个分组各自有多少种不同的排列了。不考虑循环相同的情况下,n/2长度的排列数为(n/2)!,而考虑循环相同,每n/2种排列构成相同的一种排列方式,因此总方案数应该是(n/2-1)!。两个分组的排列情况相乘,因此最后的总排列数应该为C(n/2,n)/2×\times×(n/2-1)!×\times×(n/2-1)!。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int n;
    cin>>n;
    ll ans=1;
    for(int i=1;i<=n/2;i++) ans=ans*(n-i+1)/i;//计算C(n/2,n),划分成两组
    for(int i=2;i<n/2;i++) ans*=i*i;//乘上两边n!,并且除掉两个n,化简后便是该循环。此处为两组当中排列方式不同的情况,除掉n是因为循环相同的排列也属于排列方式相同
    cout<<ans/2<<endl;//A,B和B,A的分法重复,除以2
}

F题
dp

题意为给定一个n×\times×m的矩阵,每行最多取m/2个数字,要找到一个最大的总和值,满足能被k整除。

注意到数据范围都很小,都只有70。
对于每行来说,我们可以按照取了几个数字,对k取模等于多少,分为70/2 ×\times× 70种状态。使用dp去计算每行取不超过m/2个数的情况下,对k取模为j时,能得到的最大总和值,再将它用同样的dp方式,计算到最终答案上即可。
具体实现和转移方程见代码。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int n,m,k;

int dp[50][100],ans[2][100];//dp[i][j]讨论的是某一行,代表选择了i个数的情况下,得到的sum对k取模等于j的情况下,sum的最大值
//ans数组则用滚动数组来记录最终答案,ans[i][j],代表当前已经dp计算得的所有行累加情况下,得到的sum对k取模等于j的情况下,sum的最大值

int32_t main()
{
    IOS
    bool flag=0;
    cin>>n>>m>>k;
    int lim=m/2;//每行最多取lim个数
    for(int i=0;i<n;i++)
    {
        memset(dp,0,sizeof(dp));
        for(int j=0;j<m;j++)
        {
            int x;cin>>x;
            for(int q=lim-1;q>=0;q--)//注意这里循环是从大到小
            {
                for(int p=0;p<k;p++)
                {
                    int temp=dp[q][p]+x;
                    if(temp>dp[q+1][temp%k]) dp[q+1][temp%k]=temp;
                }
            }
        }
        for(int q=0;q<k;q++)
        {
            for(int p=0;p<k;p++)
            {
                int temp=ans[flag][p]+dp[lim][q];
                if(ans[!flag][temp%k]<temp) ans[!flag][temp%k]=temp;
            }
        }
        //for(int i=0;i<k;i++) cout<<ans[!flag][i]<<endl;
        flag=!flag;//滚动数组翻滚
    }
    cout<<ans[flag][0]<<endl;
}

G题
最短路,暴力,复杂度分析

题意为给定一个n个点,m条双向边的连通图,给定k条路径的起终点。询问在将最多一条边的权值修改为0的情况下,这k条路径的消耗总和的最小值。

注意到数据范围都很小,最大1000。因此可以采取暴力一些的做法。
如果我们暴力枚举删除每条边,每次删除后暴力去跑k次Dijskra的话,总复杂度mk(n+m)logn,1e9带常数的级别,必定会tle。
这代表我们的方法过分暴力了,注意到上述表述中有两个暴力过程,我们尝试思考是否可以把其中的某一部分暴力过程优化。
对于我们把i点到j点的路径置为0,对于从q点到p点的最短路径来说,存在两种大的情况。
1.i到j点路径置为0后,q点到p点的最短路径选择未受影响
2.i到j点路径置为0后,q点到p点的最短路径选择受到影响,并且i点到j点的路径必定在新的最短路径上。

对于第二种情况,可以是q->i->j->p也可以是q->j->i->p,这两种路径长度分别为q到i的最小距离加上j到p的最小距离,和q到j的最小距离加上i到p的最小距离。这两种方案与原本不把路径置零的情况下q到p的最小距离取最小值,即为把i到j点路径置为0后,q到p的最短距离了。

有了上述结论后,我们注意到,上面需要的三个距离,我们只需对k次询问的所有起终点,都跑一次Dijskra即可。总复杂度2k(n+m)logn。
离线计算k次询问的所有起终点,到其他所有点的最短距离,之后跑一次km复杂度的计算即可。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e3+7;

int n,m,k,tot;

struct Edge
{
    int to,next,dis;
}edge[maxn*2];

int head[maxn];

void init()
{
    for(int i=1;i<=n;i++) head[i]=-1;
    tot=0;
}

void add(int u,int v,int w)
{
    edge[tot].dis=w;
    edge[tot].to=v;
    edge[tot].next=head[u];
    head[u]=tot++;
}

ll dis[maxn][maxn];//dis[i][j]记录i点到j点的最短距离

struct Node
{
    int pos;ll val;
    Node(int pos,ll val):pos(pos),val(val){}
    friend bool operator < (Node a,Node b)
    {
        return a.val>b.val;
    }
};

void Dijskra(int st)
{
    for(int i=1;i<=n;i++) dis[st][i]=llINF;
    dis[st][st]=0;
    priority_queue<Node>Q;Q.push(Node(st,0));
    while(Q.size())
    {
        Node now=Q.top();
        Q.pop();
        if(now.val>dis[st][now.pos]) continue;
        for(int i=head[now.pos];i!=-1;i=edge[i].next)
        {
            int to=edge[i].to;
            if(dis[st][to]>edge[i].dis+now.val)
            {
                dis[st][to]=edge[i].dis+now.val;
                Q.push(Node(to,dis[st][to]));
            }
        }
    }
}

int u[maxn],v[maxn],w[maxn],st[maxn],ed[maxn];

int32_t main()
{
    IOS
    cin>>n>>m>>k;
    init();
    for(int i=0;i<m;i++)
    {
        cin>>u[i]>>v[i]>>w[i];
        add(u[i],v[i],w[i]);add(v[i],u[i],w[i]);
    }
    for(int i=0;i<k;i++)
    {
        cin>>st[i]>>ed[i];
        Dijskra(st[i]);Dijskra(ed[i]);//预处理出所有询问的起终点,到其他所有点的距离
        //单次Dijskra复杂度为(n+m)logn,要跑2k次,总复杂度2k(n+m)logn
    }
    ll ans=llINF;
    for(int i=0;i<m;i++)//此处O(1)计算,总复杂度mk
    {
        ll temp=0;
        for(int j=0;j<k;j++) temp+=min(dis[st[j]][ed[j]],min(dis[st[j]][u[i]]+dis[ed[j]][v[i]],dis[st[j]][v[i]]+dis[ed[j]][u[i]]));
        ans=min(ans,temp);
    }
    cout<<ans<<endl;
}
Codeforces Round #786 (Div.3) 题解 (CF786) [A-G] Codeforces Round #786 (Div.3) 题解 [A-G] 阅读详情

相关推荐

Codeforces Round #787 (Div. 3)个人题解

Codeforces Round #787 (Div. 3)个人题解 Codeforces Round #787 (Div. 3) A. Food for Animals B. Make It Increasing C. Detective Task D. Vertical Paths E. Replace With the Previous, Minimize F. Vlad and Unfinished Business G. Sorting Pancakes

weixin_51767904的博客 1380

Codeforces Round #677 (Div. 3)

A. Boring Apartments 题意: 存在一个有规律的数列1,11,111,1111,2,22,222,2222...9,99,999,9999。 给定数列中的某个数x,询问该数(包括)前有几个数。 思路: 取出这个数的最后一位x,答案就是(x*4+当前数的位数) 时间复杂度: O(logn) AC代码: void solve() { int n; cin>>n; int k = n%10; int cnt = ...

qq_62213124的博客 668

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

Codeforces Round #677(Div.3)

Codeforces Round #677 (Div. 3) 目录Codeforces Round #677 (Div. 3)A. Boring ApartmentsB. Yet Another BookshelfC. Dominant PiranhaD. Districts Connection A. Boring Apartments 题意: 有一栋公寓有编号为1~10000的房间,从1开始拨打电话到n为止,求拨号到所有每位数字相同(例如“11”“9999”)的房间按下的次数和。例如,如果n==22

dyChao_19的博客 2066

告别机床‘卡顿’!用C语言在STM32上实现连续小线段速度前瞻(附开源代码)

本文详细介绍了如何在STM32上使用C语言实现工业级连续小线段速度前瞻控制器,解决机床运动控制中的卡顿问题。通过轻量级算法框架设计和混合精度计算策略,显著提升加工效率和表面质量。文章包含开源代码和实战案例,帮助开发者快速掌握速度前瞻规划算法在嵌入式系统中的应用。

weixin_42571738的博客 186

基于Canfestival的对象字典工具objdictedit.py的运行环境配置

本文以菜狗的视角,一步一步地对对象字典的环境进行配置,旨在能给读者一个比较详细的参考,不恰之处,还请指正。

在线求职中... 3708

Codeforces Round #355 (Div. 2) [Codeforces677]

A Vanya and Fence 模拟 B Vanya and Food Processor 模拟 C Vanya and Label 模拟快速幂 D Vanya and Treasure 分类 E Vanya and Balloons DP预处理

idealism_xxm的专栏 886

图文带你理解什么是Few-shot Learning

Few-shot Learning(少样本学习)是Meta Learning(元学习)中的一个实例1,所以在了解什么是Few-shot Learning之前有必要对Meta Learning有一个简单的认识。不过在了解什么是Meta Learning之前还是要了解一下什么是Meta。因此,阅读本文后你将对如下知识有一个初步的了解。 What is Meta What is Meta Learning What is Few-shot Learning 1. What is Meta? meta就是描述

Pr4da的博客 1万+

E. Two Round Dances(圆排列)Codeforces Round #677 (Div. 3)

原题链接: https://codeforces.com/contest/1433/problem/E 测试样例 input 2 output 1 input 4 output 3 input 8 output 1260 input 20 output 12164510040883200 题意: 有nnn个人,平均分成两组,每组围成一个圆环跳舞,问有多少种组法。 解题思路: 组合数学问题中的圆排列。晚点补证明,有兴趣的可以百度看一下证明过程。 AC代码 /* *邮箱:unique_powerhouse

pursuit的博客 763

(1)大蚂蚁即时通讯

即时通讯软件BigAnt(大蚂蚁)是杭州艾朴软件推出的一个”企业级”的即时通讯平台。该平台专为企业,其他企事业单位和政府单位而设计,目的就是为了增强内部沟通能力,提高内部员工的工作效率;同时服务器就直接置于单位内部,所有信息由单位自己管理,让单位以更安全、更可伸缩和更易于管理的方式灵活方便地使用协同和通信服务的功能! BigAnt(大蚂蚁)即时通讯软件包括服务器端和客户端。客户端功能包括单位

少安的砖厂 2234

全球AI算力最强公司分析报告

全球AI算力最强公司分析报告显示,Google凭借自研TPU技术和庞大数据中心网络位居榜首,拥有约100万至150万块等效H100 GPU算力。微软、Meta和亚马逊紧随其后,分别拥有75万、55万和25万块等效H100 GPU。中国企业中,百度、阿里巴巴和腾讯表现突出,华为在国产AI芯片领域领先。技术指标上,NVIDIA H100相比A100性能显著提升,但功耗也大幅增加。未来AI算力需求将持续激增,预计2028年全球市场将超2000亿美元。新兴挑战者如xAI可能改变竞争格局。

MyySophia的博客 5712

Codeforces Round #677 (Div. 3) A-G

比赛链接 A.把数存下来然后算一下 #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 2e5 + 10; #define fi first #define se second #define pb push_back #define wzh(x) cerr<<#x<&lt

pubgoso的博客 544

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3655

Codeforces Round #677 (Div. 3)[A-G]题解

A. Boring Apartments(思维) B. Yet Another Bookshelf(思维) C. Dominant Piranha(思维) D. Districts Connection(思维+构造) E. Two Round Dances(思维+圆排列组合数学) F. Zero Remainder Sum(思维+四维dp) G. Reducing Delivery Cost(思维+最短路) ...

代码笔记本 369

Python分布式爬虫深度实战:反爬破解+数据清洗+性能优化全流程

分布式爬虫的核心是“调度中心化+执行分布式”,Scrapy-Redis是最易落地的框架,无需从零写调度逻辑;反爬破解要分级应对:基础反爬靠随机UA/限流,进阶反爬靠代理池,高级反爬靠第三方验证码API;数据清洗的关键是“批量处理+标准化”,避免内存溢出,核心字段去重和异常值过滤是必做步骤;性能优化不是单纯加节点,而是从架构(分片)、代码(批量写入)、服务器(索引/网络)三层协同优化,才能实现效率翻倍。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1200

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Codeforces Round #760 (Div. 3)题解(A-G)

Codeforces Round #760题解

qq_45758578的博客 2403

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Codeforces Round #786 (Div. 3) A ~ G 全题解

Codeforces Round #786 (Div. 3) A ~ G 全题解 A. Number Transformation 题意 给你两个整数x,y,你需要选择两个正整数a,b使得x乘a次b后等于y,输出a和b 若无解输出0 0 思路 判断是否有解,只需要看y是不是x的倍数,如果不是则无论怎么乘都不能把x变成y 如果有解,我们选一个特殊解 令a为1,b为y/x即可 AC代码 #include<bits/stdc++.h> using namespace std; const int N

csxylrf的博客 1324

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Codeforces 1475】Codeforces Round #697 (Div. 3) | 全题解

:比赛连接 emm,消极了,消极了。这场可以akakak的,看到unrunrunr不想打了,奇怪了,本身我也不加分的呀。 赛后333分钟过GGG,101010分钟过FFF,不该消极的。 不传播负能量了,开始题解了。 A.Odd Divisor 题目大意: 判断一个整数nnn,是否具有为奇数的因子 题目思路: 水题了吧. 只需要判断是否是2的幂即可,不是2的幂必定有奇数因子呀。 Code: /*** keep hungry and calm CoolGuang! ***/ #pragma GCC optim

一只酷酷光儿的博客 3273

【算法题解】Codeforces Round #817 (Div. 4)题解

只要我们有改变--就会有获得感--就回增加自信--就会有助于坚持--就可以帮助你改掉拖延的顽疾!

小新的博客 1580

Codeforces Round #744 (Div. 3)题解A-G

Codeforces Round #744 (Div. 3) A. Casimir’s String Solitaire 分析:不难发现,当且仅当B的个数等于A和C的个数的和时,可行。 代码: #include <algorithm> #include <iostream> using namespace std; const int N = 500; char s[N]; void solve() { scanf("%s",s); int a, b; a = b

Arctic_Clam的博客 707

Codeforces Round #697 (Div. 3 A-G)题解(新鲜)

记录一下div3第一次akakak,虽然是因为这次很简单的原因…不过还是很开心hhh A,BA,BA,B太简单了就不写了,然后下面每一题都写了比较详细的题解^_^. 1475C. Ball in Berland(容斥原理) 1475D. Cleaning the Phone(二分+前缀和) 1475E.Advertising Agency(排序) 1475F. Unusual Matrix(构造,模拟) 1475G. Strange Beauty(dp+优化) ...

jziwjxjd的博客 1723

Codeforces Round #677 (Div. 3)A-G

Codeforces Round #677 (Div. 3) A. Boring Apartments 题意: 一个无聊的人喜欢 给楼层居民打电话 如果他要给某户人打电话它会吧之前的每户都打一遍 问他在打给某房间号 按了多少个数字 其中 房间号 定义类似如下 第一层【1,11,111,1111】 第二层 【2,22,222,2222】 问题分析: 每层全拍 就是10个数字=1+2+3+4 最后一层 没户按键数量就是他目前的长度 看码,看码。 AC代码: #include<iostream> #

MaxVen 193

Codeforces Round #702 (Div. 3)A-G题解

Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mid]<x)居然写成了if(dp[l]<x),做梦都没想到自己二分有写错的一天,疯狂白给5发。 Div3相对以前变简单了,罚时手速场。 A题 暴力 题意: 1000组数据 给定一个只包含正整数的长度为n的数组(n最大50),每个数字均在1到50之间。 你可以在任意位置插入任意的整数(这里其实有bug,

StandNotAlone的博客 3170

Codeforces Round #481 (Div. 3)(A-G)题解

Codeforces Round #481 (Div. 3)(A-G)题解 传送门 A. Remove Duplicates 思路:先用一个vis[]vis[]vis[]记录那些数出现过,储存他们最后一次出现位置,然后排个序输出即可。 时间复杂度:O(n)O(n)O(n) 实际上不用排序,直接顺序遍历对应匹配输出即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=50+5,M=1e6

Harris-H的博客 719

Codeforces Round #677 (Div. 3) A - G

Codeforces Round #677 (Div. 3) A. Boring Apartments 思路 设相同的数的数为n位数为k,可以很明显看到答案为 (n - 1) * 10 + (1 + 2 + 3 ···+ k ) 代码 #include<iostream> using namespace std; int main(){ int T; cin >> T; while(T--){ int n; scan

qq_45074215的博客 259
上一篇: 2020CCPC绵阳站后记
下一篇: 2020CCPC长春站后记
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值