首页 > 其他分享 >CF1715B 题解

CF1715B 题解

时间:2022-08-27 13:22:26浏览次数:99  
标签:le read 题解 LL times CF1715B op left

前言

题目传送门!

更好的阅读体验?

看起来挺难,其实一分钟就能想出来。

思路

首先考虑什么时候无解。由于 \(k \times \left\lfloor\dfrac{a}{k}\right\rfloor \le a \le \left\lfloor\dfrac{a}{k}\right\rfloor + (k - 1)\),\(a\) 与 \(k\) 是自然数。'

所以可得下式。(看起来很复杂,其实很简单,要耐心看!)

\[k \times \sum\limits_{i=1}^n\lfloor\frac{a_i}{k}\rfloor \le\sum\limits_{i=1}^na_i \le k \times \sum\limits_{i=1}^n\lfloor\frac{a_i}{k}\rfloor + n \times (k - 1) \]

用原题中的 \(b\) 和 \(k\) 表示。

\[k \times b \le s \le k \times b + n \times (k - 1) \]

不在这个范围内,就是无解了。

继续思考:在这个范围内就是有解,那怎么构造解呢?

我们可以先满足 \(b\),再满足 \(s\)。

满足 \(b\) 非常简单,我们可以直接让 \(a_1 = k \times b\)。然后计算用掉 \(a_1\) 后剩下的 \(s\)。

接下来,每一个 \(a_i\) 都可以再塞 \(0\) 到 \((k - 1)\)。由于范围限制,最后一定是可以塞完的。那这题就做完啦。

完整代码

#include <iostream>
#include <cstdio>
#include <cstring>
#define space putchar(' ')
#define endl putchar('\n')
using namespace std;
typedef long long LL;
typedef long double LD;
void fastio()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
}
LL read()
{
	char op = getchar(); LL x = 0, f = 1;
	while (op < 48 || op > 57) {if (op == '-') f = -1; op = getchar();}
	while (48 <= op && op <= 57) x = (x << 1) + (x << 3) + (op ^ 48), op = getchar();
	return x * f;
}
void write(LL x)
{
	if (x < 0) putchar('-'), x = -x;
	if (x > 9) write(x / 10);
	putchar(x % 10 + 48);
}
LL a[100005];
void solve()
{
	LL n = read(), k = read(), b = read(), s = read();
	if (b * k <= s && s <= b * k + n * (k-1))
	{
	    a[1] = b * k;
		LL left = s - b * k;
		for (int i = 1; i <= n; i++, space)
		{
			if (left >= k - 1) write(a[i] + k - 1), left -= (k - 1);
			else if (left != 0) write(a[i] + left), left = 0;
			else write(a[i]);
		}
		endl;
	}
	else puts("-1");
}
int main()
{
	int T = read();
	while (T--) solve();
	return 0;
}

其实也可以不用数组,思路是一样的。代码也差不了多少。

希望能帮助到大家!

首发:2022-08-25 12:49:06

标签:le,read,题解,LL,times,CF1715B,op,left
From: https://www.cnblogs.com/liangbowen/p/16630417.html

相关文章

  • CF1715D 题解
    前言题目传送门!更好的阅读体验?感觉挺不错的一道图论转化题。(其实也和图论关系不大。)思路对于每个条件\(a_u\mida_v=x\),二进制拆掉\(x\)。如果\(x\)的二进制......
  • 「NOI2016」网格 题解
    「NOI2016」网格题解前言感谢zqm学长提供调代码服务!本文中,所有没有特殊说明的连通都是指四连通,相邻都是指上下左右相邻。题目大意有一个$n\timesm$的网格,上......
  • 【IAP Kit】应用内支付订单参数相关问题解析
    ​1、创建的订单orderId长度是多少?答:orderId的长度最大是255。 2、InappPurchaseDetails中orderId和payOrderId有什么区别呢?答:orderId和payOrderId这两者的区别如下:o......
  • 优先队列-多路归并系列题解
    373.查找和最小的K对数字问题描述给定两个以升序排列的整数数组nums1和nums2 , 以及一个整数k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来......
  • 【题解】CF1007D Ants
    传送门题意:有\(m\)对链,每对链要选择一条,使得选择的链两两不交,求一组方案。题解:一眼看上去就是一个2-sat,考虑一种暴力的做法,枚举每一条边,覆盖这条边的链两两连边。......
  • 题解 UVA10791
    前言:数学符号约定:\(p\):任意一个质数\(n\)或\(m\):任意一个正整数\(a_i\):唯一分解时质数的指数\(A\):集合若无特殊说明,本篇题解的数学符号将会严格按照上......
  • 20220823 模拟赛题解
    T1文件压缩DecriptionlinkSolution可以根据\(S'\)和\(p\)求出第一个字符,然后把\(S'\)sort一遍后得到字符串\(T\),那么我们就可以求出每一个字符的前驱和后继,所......
  • LeetCode 链表的中间结点算法题解 All In One
    LeetCode链表的中间结点算法题解AllInOnejs/ts实现重排链表链表的中间结点原理图解//快慢指针functionmiddleNode(head:ListNode|null):ListNode|n......
  • k8s问题解决
    问题1:问题描述:k8s中Terminating状态pod不能删除[root@master~]#kubectlgetpods-nmsNAMEREADYSTATUSRESTARTSAGEportal-78......
  • Unable to create an object of type 'DbContext'问题解决,网上搜来的没一个对的。
    用了很久的EFCore了,第一次遇到这个问题,觉得很奇怪,baidu了一下,都是要提供设计时工厂的答案。很明显这个做法是有问题的,都是DI的年代了,你的DbContext又不是动态生产了一堆......