首页 > 其他分享 >牛客练习赛113 D 小红的数组操作(hard version)

牛客练习赛113 D 小红的数组操作(hard version)

时间:2023-07-08 20:56:24浏览次数:60  
标签:练习赛 int res sum hard 最小 113 include ll

题目要求求出最小的总代价使得平均数为整数,转换式子可得实际就是求出a,b使得(a*x-b*y+sum)%n==0且a*p+b*q要最小,平均值的为sum/n,因此对sum进行操作使其成为n的倍数即可

(a*x-b*y+sum)%n==0

=>((a*x+sum)%n-b*y%n)%n==0

因为(a*x+sum)%n<n,b*y%n<n,因此要想二者差求余数为0一定为(a*x+sum)%n=b*y%n,又因为对于任意倍数的x来说对n取余的余数个数最多不超过n

因此我们先预处理求得所有(a*x+sum)%n的最小花费然后再遍历b*y%n判断是否有对应的a求所有的最小花费

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll n,p,x,q,y;
map<ll,ll> f;
void solve(){
    ll sum=0;
    cin>>n>>p>>x>>q>>y;
    for(int i=1;i<=n;i++){
        int u;
        cin>>u;
        sum+=u;
    }
    for(int i=0;i<n;i++){
    	if(!f[(i*x%n+sum%n)%n])//注意求最小花费,因为由小到大枚举因此第一次枚举到的一定为最小的
        f[(i*x%n+sum%n)%n]=(i+1)*p;//加一是为了让所有对应的花费都大于0好判断
    }
    ll res=1e18;
    for(int i=0;i<=n;i++){
        int u=i*y%n;
        if(f[u]>0){
            res=min(res,f[u]+i*q-p);//这里要对应的减去1个p
        }
    }
    if(res==1e18) cout<<-1;
    else cout<<res;
    
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}

 

标签:练习赛,int,res,sum,hard,最小,113,include,ll
From: https://www.cnblogs.com/liyiyang/p/17537837.html

相关文章

  • t113-c-设备树-驱动调用篇(获取设备节点和属性)
    我们以pwm为例编写程序1.首先编写出入口函数//#include"linux/module.h"//#include"linux/fs.h"////#include"linux/stddef.h"//#include"linux/types.h"////#include"crypto/if_alg.h"#include"treecom.h"......
  • 解决高可用集群篇(三)-- MySQL主从复制&ShardingSphere读写分离分库分表的具体操作步
    高可用集群篇(三)--MySQL主从复制&ShardingSphere读写分离分库分表1.什么是MySQL主从复制?MySQL主从复制是指将一个MySQL数据库服务器作为主服务器,其他MySQL服务器作为从服务器,通过将主服务器上的数据变更同步到从服务器上,实现数据的复制和同步的过程。主从复制的实现方式主......
  • 错误:rpmdb: BDB0113 Thread/process 8709/139671674841152 failed
    rpm库报错错误:rpmdb:BDB0113Thread/process8709/139671674841152failed:BDB1507ThreaddiedinBerkeleyDBlibrary错误:db5错误(-30973)来自dbenv->failchk:BDB0087DB_RUNRECOVERY:Fatalerror,rundatabaserecovery错误:无法使用db5- (-30973)打开Packages......
  • mysql分库分表 sharding-jdbc 5.0的代码实现 (二)
    分库分表之前试过了分表不分库,详情见:https://www.cnblogs.com/expiator/p/17524493.html这次再试下分库分表。依赖包SpringBoot用的是2.6.13版本。<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-......
  • t113-c-内核字符型设备驱动篇
    那么既然ko的驱动已经可以运行,那么我们来写几个简单的操作设备树的内核驱动字符型设备驱动和应用层这俩种代码是分开的,设备驱动调用的是内核的地址,而应用层则是相当于虚拟地址,所以应用层传递参数的时候不能直接付给指针,要调用相对于的参数内核->驱动->应用驱动的编写找到sdk......
  • 牛客练习赛 112 B~C题题解
    卡B题了,难受B.qsggandSubarrayB-qsggandSubarray_牛客练习赛112(nowcoder.com)题意给定一个长为n的序列,求有多少个子区间的按位与和为0。思路要想按位与之和为0,那么对于区间的所有数,每个二进制位都要有一个0。设f[i]表示二进制位i的最右边一个0出现的位置,枚举序列的每......
  • t113-c-内核驱动寻找问题篇
    第三次尝试经过demsg的查看,原来是内核版本不对的原因,因此我们需要根据韦东山老师的教程换一次内核经过不懈努力,好像过程很容易,但在最后栽了跟头boot区挂载失败,这怎么办呀并没有重复挂载查看mmcblk0分区的映射......
  • 全志Tina Linux SPINAND UBI 离线烧录 开发指南 支持百问网T113 D1-H哪吒 DongshanPI-
    1概述编写目的:介绍SunxiSPINand烧写时的数据布局2名词解释词义UBIunsortedblockimagePEBphysicaleraseblockLEBlogicaleraseblockPEB和logicalblock关系1PEB=1logicalblock1logicalblock=2physicalblocks3总体数据布局ubi方案FLASH上的数据布局sys_pa......
  • ShardingJDBC 01_概念及主要功能
    1ShardingJDBC是什么Sharding-JDBC是ApacheShardingSphere生态圈中一款开源的分布式数据库第三方组件。ShardingSphere由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar3款相互独立的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,适用于Java......
  • t113-c-驱动ko制作与运行篇
    记录:tina的include文件在:/home/momo/T113/Tina-Linux/lichee/linux-5.4/include驱动文件:/home/momo/T113/Tina-Linux/lichee/linux-5.4/drivers而设备树文件在:/home/momo/T113/Tina-Linux/lichee/linux-5.4/arch/arm/boot/dtst113所用的设备树文件在:/home/momo/T113/Tina-Linu......