Codeforces Round #775 (Div. 2)

简介: 算法

A. Game


题意:

有n块相邻的土地,只有1可以走,0就不能走,你有一次超级跳的机会,每次多跳一格就会多消耗一金币,求最少的花费。


思路:

注意只能跳一次,然后必须要能够达到终点,那么从头和尾分别找第一个出现的0,然后算一下差距即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j,t,d1;
    cin>>t;
    while(t--)
    {
        int flag1=0,flag2=0;
        cin>>n;
        vector<int >a;
        for(i=1;i<=n;i++) {
            cin>>j;
            a.push_back(j);
        }
        for(i=0;i<n;i++){
            if(a[i]==0){
                flag1=i+1;
                break;
            }
        }
        if(flag1==0){
            cout<<0<<endl;
            continue;
        }
        for(i=n-1;i>=0;i--){
            if(a[i]==0){
                flag2=i+2;
                break;
            }
        }
        cout<<flag2+1-flag1<<endl;
    }
    return 0;
}

B. Game of Ball Passing


题意:

知道每个球员的传球次数,求最少要几个球能完成每个人的传球要求

思路:

不难想到应该是答案应该是取决于需要传球次数最多的人,然后如果最多传球次数的两倍小于等于传球总数,那么只需要一个球就行了,例如1,2,3,3,总数8,但是最大的次数才3次,那么他们肯定可以两两传完,否则就输出他们的差即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+100;
long long  a[maxn];
signed  main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    long long  n,i,j,t;
    cin>>t;
    while(t--){
        cin>>n;
        long long l=0,r=0;
        for(i=0;i<n;i++){
            cin>>a[i];
            r+=a[i];
            l=max(l,a[i]);
        }
        if(l==0){
            cout<<0<<endl;
        }
        else if(l*2<=r){
            cout<<1<<endl;
        }
        else {
            cout<<l-(r-l)<<endl;
        }
    }
    return 0;
}
/*
10
4
999999999 999999999 9999999999 1
*/

C. Weird Sum

题意:

给你一个矩阵,每个位置都填上一个数,然后求相同数的任意两点之间的曼哈顿距离之和是多少?


思路:

首先要从曼哈顿距离去考虑这题,曼哈顿距离简单来说就是两个点之间的横坐标差+纵坐标差的和,接下来就去思考,如果都填一个数,怎么快速的算出来他们任意两个点之间的差距呢?


这里假设他们相同的数字有五个,他们横坐标分别是1,3,5,7


那么考虑他们每个点对答案的贡献就如下:


对于i点,能造成答案贡献的有a-b,a表示终点,b表示起点,3-1代表1到3需要2
1: (3-1) (5-1) (7-1)
3: (5-3) (7-3)
5: (7-5)

7:



再把加法和减法分开来看,就可以发现按顺序排列之后会有规律:

加法: +7*3 +5*2 +3*1
减法: -1*3 -3*2 -5*1

再把式子一提取一下,那么对于每个点a[i],对答案的贡献就是i*a[i]-(n-i)*a[i]

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+100;
#define int long long 
signed main()
{
    int n,m,i,j,d1;
    map<int ,vector<int > >x,y;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            cin>>d1;
            x[d1].push_back(i);
            y[d1].push_back(j);
        }
    }
    long long ans=0,c=0;
    for(auto &[a,b]:x)
    {
        int c=0;
        sort(b.begin(),b.end());
        for(auto c1:b)
        {
            ans+=c1*c;
            c++;
            ans-=c1*(b.size()-c);
        }
    }
    for(auto &[a,b]:y)
    {
        int c=0;
        sort(b.begin(),b.end());
        for(auto c1:b)
        {
            ans+=c1*c;
            c++;
            ans-=c1*(b.size()-c);
        }
    }
    cout<<ans<<endl;
    return 0;
}


相关文章
|
移动开发 JavaScript 前端开发
如何处理 h5 使用 iframe 嵌套页面,内外 viewport 不一致导致的缩放问题?
如何处理 h5 使用 iframe 嵌套页面,内外 viewport 不一致导致的缩放问题?
1983 0
|
供应链 小程序 物联网
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
3212 0
B2B2C、C2F、S2B2b2C、O2O、S2B2C和各种的模式缩写解释说明
|
SQL JavaScript 前端开发
学生管理系统Element UI版(上)
搭建环境 创建vue项目:vue create day16_element_student 安装第三方组件:axios、element
159 0
|
9月前
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。
222 19
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
|
开发框架 前端开发 Linux
Go语言实战框架,GoFly全栈开发社区的Go快速开发框架简介与阿里服务器部署说明
GoFly中后台框架永久开源可商用。api文档管理并一键生成api接口代码,一键生成 CRUD前后端代码, GoFly快速开发框架是一款基于Go语言的 Gin和 Vue3的Arco Design的快速后台开发框架,基于JWT接口验证和Auth验证的权限管理系统,附件管理系统,天生支持saas架构。可打包部署在阿里云Linux系统上。
821 1
|
Web App开发 JavaScript 前端开发
Vue上传图片裁剪预览插件vue-img-cutter的使用
Vue上传图片裁剪预览插件vue-img-cutter的使用
666 0
|
存储 关系型数据库 MySQL
表设计的10条军规
本文主要介绍了数据库建表的18个小技巧,包括:名字的命名规范、字段类型的选取、字段长度的控制、外键的使用、索引的创建、主键的选择、字段个数的限制、存储引擎的选择、时间字段的处理、金额字段的保存、冗余字段的使用以及注释的添加。作者强调了命名的重要性,如使用小写字母、避免全大写、使用下划线分隔等,并提倡使用NOT NULL和默认值,合理选择字段类型如datetime、decimal等,以及避免使用过多的字段和索引。此外,还提到了字符集和排序规则的选择,以及大字段和冗余字段的处理。
339 1
|
SQL 监控 前端开发
Springboot过滤器和拦截器详解及使用场景
过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。