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

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

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

NOIP2008年普及组初赛题目答案及解析

NOIP2008年初赛详细题解

城南蝈蝈 926

基于ROS的机械臂手眼标定-Aruco使用与相机标定

基于ROS的机械臂手眼标定-Aruco使用与相机标定 折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。 程序都是Copy的开源代码,所以也开源出来: 开源地址:https://gitee.com/ohhuo/handeye-calib 作为手眼标定中的重要一环,相机中标定板位姿关系获取直接影响标定精度,我们使用aruco这个开源程序来实现坐标的获取。 #mermaid-svg-WkFpFkV4QqzXMvJ4 .labe

生活不止眼前的苟且 1万+

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

Zotero on Mac: 高效文献管理与引用指南

本文为Mac用户提供了一份全面的Zotero高效文献管理与引用指南。从安装配置、文献收集管理、PDF深度阅读与笔记,到在Word中无缝插入引用和生成参考文献,详细讲解了核心工作流。同时推荐了ZotFile、Better BibTeX等必备插件,并介绍了利用同步与WebDAV实现跨设备无缝衔接的方法,助力研究者构建个人数字知识库,极大提升学术研究效率。

weixin_29281941的博客 1177

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

AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程

由于需要学习一下atmel的atsaml 系列,使用AtmelStudio 7开发,之前主要用STM32,现在看到Atmel的库函数,其实是有些类相似的。 ASF3的库对应ST的标准库。ASF4对应ST的HAL库,Ateml Start对应STM32CubeMX。但在这里还是用ASF3来开发,因为Ateml Start还不支持我的这个芯片,而且和STM32的HAL库类似,ASF4为了好移植都是底...

yxy244的博客 8657

LVGL 离线字体转换lv_font_conv本地安装

LVGL FONT CONV 离线版本

liu132641的专栏 3386

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

Ferry工单平台部署

ferry工单平台部署

运维求生之路 1897

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

【应用】什么是Azure?一文读懂微软云的核心逻辑与全球版图

作为微软的核心云计算服务平台,Azure不仅是数字化转型的引擎,更是全球企业在构建、扩展与优化IT基础设施时的首选平台。在这篇文章中,我们将深入探讨Azure云服务平台的各个方面,涵盖其核心优势、架构、功能、应用场景以及未来发展趋势。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1954

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

Codeforces Round #760题解

qq_45758578的博客 2403

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【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、付费专栏及课程。

余额充值