Codeforces 1512E 思维+构造

news/2024/11/17 22:26:13/

1512E
题意:找到给定区间长度并且区间和为s的序列;
题解:序列可能有多种情况,可以采用较为连续的序列来表示,这样
可以保证序列的每个值不会大于n;
步骤:

假如一个数字s,和区间长度len,用连续数字表示的话,
每个数字之间就会相差1,
首先把这个相差的1除去,然后就可以算出他们len个相同的初始的值,
其中这个相差的值为int k=len*(len+1)/2-len,
或者可以写成len*(len-1)/2,表示长度为len-1的公差为1的数列的和,
s-=k;s/=len;,s就是初始值,每次加一即可;
这里有可能出现s%len!=0的情况,先找到初始值,然后从后面开始依次给
每个数字+1,注意不能一次性加到某一个数字上,有可能会导致数组冲突或者
超过n,从后往前避免了数组冲突,依次+1防止超过n;

code

#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;
int main() {int t;cin >> t;while (t--) {int n, l, r, s;cin >> n >> l >> r >> s;ll a = (1 + r - l + 1) * (r - l + 1) / 2;//区间最小值;ll b = (n + n - r + l) * (r - l + 1) / 2;//区间最大值;if (s > b || s < a) {cout << "-1" << endl;} else {int len = r - l + 1;int p = len * (len + 1) / 2 - len;int k = (s - p) / len;vector<int> v;map<int, int> mp;if ((s - p) % len == 0) {while (len--) {v.push_back(k);mp[k]++;k++;}} else if ((s - p) % len) {int len1 = len;while (len--) {v.push_back(k);k++;}int tem = (s - p) % len1;for (int i = v.size() - 1; i >= 0; i--) {if (tem) {v[i]++;tem--;}mp[v[i]]++;}}map<int, int>mmp;for (int i = 1, cnt = 1; i <= n, cnt < l; i++) {if (mp[i] == 0) {cout << i << " ";mmp[i]++, cnt++;}}for (auto i : v) cout << i << " ";for (int i = 1; i <= n; i++) {if (mp[i] == 0 and mmp[i] == 0)cout << i << " ";}cout << endl;}}return 0;
}

http://www.ppmy.cn/news/271997.html

相关文章

CodeForces 1512F : Education 模拟

传送门 题目描述 给你一个序列 a i a_{i} ai​和 b i b_{i} bi​&#xff0c;你如果在 i i i点停留一天&#xff0c;可以或者 a i a_{i} ai​单位的金钱&#xff0c;你如果想从 i i i点移动到 i 1 i 1 i1 点&#xff0c;需要一天时间&#xff0c;并支付 a i a_{i} ai​单位…

获取摩拜单车在地区的车辆python多线程实现

通过微信小程序&#xff08;摩拜&#xff09;&#xff0c;填写请求头&#xff0c;数据&#xff0c;post方式传递给服务器获取response 反反爬虫&#xff1a;useragent轮转&#xff08;手机useragent&#xff09;、代理ip、休眠0.1s 代码分为两部分&#xff1a;多线程获取代理…

python3.6爬虫案例:爬取顶点小说(爱看小说同学的福利)

一、写在前面 这次本来打算爬百思不得姐视频的&#xff0c;谁料赶上此网站调整&#xff0c;视频专栏下线了&#xff0c;网站中也没有视频可爬。所幸先来说说如何爬取顶点小说吧。 顶点小说&#xff08;https://www.x23us.com&#xff09;里面的内容很丰富&#xff0c;不过我们要…

【leetcode】周赛197---(1)1512. 好数对的数目(2)1513. 仅含 1 的子串数(3)1514. 概率最大的路径(4)1515. 服务中心的最佳位置

1512、给你一个整数数组 nums 。 如果一组数字 (i,j) 满足 nums[i] nums[j] 且 i < j &#xff0c;就可以认为这是一组 好数对 。 返回好数对的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1,1,3] 输出&#xff1a;4 解释&#xff1a;有 4 组好数对&#xff0…

hdu 1512 Monkey King (左偏树 可并堆)

hdu 1512 Monkey King &#xff08;左偏树 实现 可并堆&#xff09; 模板&#xff1a;http://hi.baidu.com/cjn1466572108/item/c2b7c13e58f7aba1b711dba6 待验证 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include &l…

【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

文章目录 一、MHAProxySQL架构二、快速搭建MHA环境2.1 下载MHA镜像2.2 编辑yml文件&#xff0c;创建MHA相关容器2.3 安装docker-compose软件&#xff08;若已安装&#xff0c;可忽略&#xff09;2.4 创建MHA容器2.5 主库131添加VIP 三、配置ProxySQL环境3.1 申请ProxySQL主机并…

hdu1512 zoj2334Monkey King(左偏树 + 并查集)

参考:http://blog.csdn.net/pi9nc/article/details/11827501 题目:https://vjudge.net/problem/HDU-1512 他的注释很详细. 题目大意&#xff1a;有n个猴子&#xff0c;一开始每个猴子只认识自己。每个猴子有一个力量值&#xff0c;力量值越大表示这个猴子打架越厉害。如果2个…

HDOJ 1512 Monkey King -- 左偏树

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1512 分析&#xff1a;左偏树应用。在结点中加入了parent指针和id字段&#xff0c;这样可以代替并查集。关于左偏树可以参考黄源河的论文《左偏树的特点及其应用》。 #include #include #include #include #in…