首页 > 其他分享 >CodeForces 1909D Split Plus K

CodeForces 1909D Split Plus K

时间:2023-12-24 12:22:52浏览次数:44  
标签:typedef int ll CodeForces long Plus Split 1909D define

洛谷传送门

CF 传送门

设最后每个数都相等时为 \(t\)。那么一次操作变成了合并两个数 \(x, y\),再增加 \(x + y - k\)。于是每个 \(a_i\) 可以被表示成 \(b_i t - (b_i - 1)k\) 的形式,化简得 \(a_i - k = b_i (t - k)\)。

因为 \(t - k\) 对于每个 \(i\) 都相同,又因为我们的目标是最小化 \(\sum\limits_{i = 1}^n b_i\),所以 \(t - k\) 取 \(\gcd\limits_{i = 1}^n (a_i - k)\) 最优。

注意所有 \(a_i - k\) 同号才合法,以及特判掉初始 \(a_i\) 全部相同的情况后不能出现 \(a_i = k\)。

code
// Problem: D. Split Plus K
// Contest: Codeforces - Pinely Round 3 (Div. 1 + Div. 2)
// URL: https://codeforces.com/contest/1909/problem/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 200100;

ll n, m, a[maxn];

void solve() {
	scanf("%lld%lld", &n, &m);
	ll s = 0, g = 0;
	bool fl = 1;
	for (int i = 1; i <= n; ++i) {
		scanf("%lld", &a[i]);
		s += a[i];
		g = __gcd(g, abs(a[i] - m));
		fl &= (a[i] == a[1]);
	}
	if (fl) {
		puts("0");
		return;
	}
	ll ans = 0;
	int x = 0;
	for (int i = 1; i <= n; ++i) {
		if (a[i] == m) {
			puts("-1");
			return;
		}
		if (a[i] > m) {
			x |= 1;
		} else {
			x |= 2;
		}
		ans += abs(a[i] - m) / g;
	}
	printf("%lld\n", x == 3 ? -1LL : ans - n);
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,int,ll,CodeForces,long,Plus,Split,1909D,define
From: https://www.cnblogs.com/zltzlt-blog/p/17924234.html

相关文章

  • CodeForces 1909F2 Small Permutation Problem (Hard Version)
    洛谷传送门CF传送门感觉这个题还是挺不错的。考虑F1。考察\(a_i\)差分后的意义,发现\(a_i-a_{i-1}\)就是\((\sum\limits_{j=1}^{i-1}[p_j=i])+p_i\lei\)。考虑将其转化为棋盘问题。在\((i,p_i)\)放一个车,那么\(a_i-a_{i-1}\)就是\((1,i)\sim......
  • MyBatisPlus简介及快速搭建
    一、简介MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强,不做改变,为简化开发,提高效率而生。特性及官网链接(简称苞米豆):可在IDEA中安装以下插件:MybatisX:支持跳转,自动补全生成SQL;dynamic-datasource:基于SpringBoot的多数据源组件,功能强悍,支持Seat......
  • mybatis与mybatisplus
    使用这个不会造成冲突 同时不要把<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>删除<dependency><grou......
  • Codeforces 1900E Transitive Graph
    考虑题目的限制条件:存在$a\tob,b\toc$的边,就会有$a\toc$的边。考虑$p_{1\simk}$,满足这$k$个点按顺序组成了一个环且无重点。那么$p_1\top_2,p_2\top_3$,就有$p_1\top_3$,又有$p_3\top_4$,所以有$p_1\top_4$。以此类推,会发现$\foralli,j\in[1,k],i\not......
  • mybatis-plus 逻辑删除时报错
    报错原因sql语句查询时出现关键字导致报错1、数据库中字段名称2、实体类中字段名称3、yml中配置4、执行查询5、MySQL中执行查询5、解决方法在实体中不要把MySQL的关键字作为实体名字,改个即可。如果在实体中命名与MySQL关键字冲突,也可以使用``号实现......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......
  • element-plus的type类型为daterange的时候限制时间选择
    对于ElementPlus的日期时间范围选择组件(el-date-picker的type设置为"daterange"),你可以使用:picker-options属性来设置选项,通过disabledDate函数来禁止选择当前时间之前的日期。下面是一个el-date-picker(type为"daterange")的示例,它禁止选择今天之前的日期:<el-date-......
  • MyBatis-Plus 可视化代码生成器
    MyBatis-Plus可视化代码生成器来啦,让你的开发效率大大提速!!来源:blog.csdn.net/yelangkingwuzuhu/article/details/128077533前言一、mybatis-plus-generator-ui是什么?二、mybatis-plus-generator-ui怎么用?1、mavenpom引入2、新建程序入口,以main函数的方式运行3、......
  • [Codeforces] CF1579C Ticks
    CF1579CTicks题意\(n\timesm\)的棋盘,左上角和右下角坐标分别为\((1,1),(n,m)\),一开始每个格子为白色。每次操作可以选择一个格子\((x,y)\)以及左上角和右上角方向的\(d\)个连续格子染成黑色,并将其称为一个大小为\(d\)的对勾图案。如果多个对勾图案重复对一个格......
  • [Codeforces] CF1811E Living Sequence
    CF1811ELivingSequence这道题洛谷题解的思路比我的更好,可以参考一下题解,但是没人提到我这种做法题意给定一个正整数\(k\)\((1\lek\le10^{12})\),请你输出第\(k\)个数字里没有4的正整数。思路设\(f_i\)表示前\(10^i\)个\(i\)位数里边不含4的数的个数,列举几个如......