CF1809C Sum on Subarrays 题解
一道黄题做了一上午我可以退役了。
构造题。由于直接构造并不是那么容易,所以考虑在一个初始元素全为 \(-1\) 的序列上构造。
考虑将一个负数改为正数 \(1000\) 对答案造成的贡献(因为取 \(1000\) 计算比较方便)。设在放置这个正元素之前已经放置了 \(x\) 个正元素,则这个正元素会造成 \(n-x\) 的贡献,也就是会创造 \(n-x\) 个新的正区间。
原因显然,由于负数均为 \(-1\),\(n\) 又小于等于 \(30\),\(1000\) 相当于正无穷,所以从这个元素到序列中的任何一个位置都是正区间。如果某一个位置已经是 \(1000\) 了,那么在插入之前的这个 \(1000\) 时已经计算了这一段区间,需要减去不计算,所以贡献为 \(n-x\)。
由于位置无关,我们尽量把 \(1000\) 往后放,如果再放一个 \(1000\) 就超过了正区间的数量,我们考虑在前面创造一些单独的正区间。设剩下的数为 \(s\),则我们将第一个数改为 \(200\),很明显,这也相当于一个正无穷。然后,我们要把第 \(s+1\) 个位置的数改为 \(-400\),消除 \(200\) 对后面的数的影响。由于之前放的数是 \(1000\),所以 \(-400\) 并不会影响其正无穷性质。
第一个数 \(200\) 可以把从第一个数开始到 \(s+1\) 以前的区间变成正区间,刚好是 \(s\) 个正区间,刚好符合要求。
#include <bits/stdc++.h>
using namespace std;
long long t,n,k,a[40];
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&k);
long long now=n;
for(int i=1;i<=n;i++)a[i]=-1;
for(int i=n;i>=1;i--)
if(k>=now)a[i]=1000,k-=now,now--;
else break;
if(k!=0)a[1]=200,a[k+1]=-400;
for(int i=1;i<=n;i++)printf("%lld ",a[i]);
printf("\n");
}
return 0;
}
CF1809C Sum on Subarrays 题解的更多相关文章
- [LeetCode] Range Sum Query - Mutable 题解
题目 题目 思路 一看就是单点更新和区间求和,故用线段树做. 一开始没搞清楚,题目给定的i是从0开始还是从1开始,还以为是从1开始,导致后面把下标都改掉了,还有用区间更新的代码去实现单点更新,虽然两者 ...
- Educational Codeforces Round 37-F.SUM and REPLACE题解
一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...
- CF102B Sum of Digits 题解
Content 给定一个数 \(n\),每次操作可以将 \(n\) 变成 \(n\) 各位数之和.问你几次操作之后可以将 \(n\) 变为一位数. 数据范围:\(1\leqslant n\leqsla ...
- Codeforces 396B On Sum of Fractions 数论
题目链接:Codeforces 396B On Sum of Fractions 题解来自:http://blog.csdn.net/keshuai19940722/article/details/2 ...
- LeetCode 548. Split Array with Equal Sum (分割数组使得子数组的和都相同)$
Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies fol ...
- [LeetCode] Split Array with Equal Sum 分割数组成和相同的子数组
Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies fol ...
- Minimum Size Subarray Sum LT209
Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...
- 【AtCoder】Dwango Programming Contest V题解
A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...
- Path Sum leetcode java
题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...
- 【CF914G】Sum the Fibonacci 快速??变换模板
[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a ...
随机推荐
- Ruby+Appium+testunit实现app自动化demo
1.安装对应库 gem install test-unit gem install appium_lib 2.编写代码 代码如下: require 'appium_lib' require 'test ...
- jmeter使用:解决压测时获取token问题
在执行压测过程中,首先要执行登录接口来获取token.如果并发数比较大只需要一个用户的登录token,可以使用setup线程组.如果是模拟多个用户登录获取token,需要使用仅一次控制器. 一.添加s ...
- 元素垂直居中、viewport、meta、文本溢出显示省略号...
| 原文:面试的信心来源于过硬的基础 https://segmentfault.com/a/1190000013331105?utm_source=channel-newest 1. viewport ...
- 2025dsfz集训Day3:DFS搜索与剪枝
DAY3: DFS搜索与剪枝 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 深搜 深度优 ...
- SaltStack 远程命令执行中文乱码问题
问题 我在一台服务器上写了一个简单的 Python 脚本 haha.py,内容如下: [root@localhost ~]# cat haha.py print("你好") 当我在 ...
- 【记录】Pandoc|Linux安装最新Pandoc
参考:官方文档,https://pandoc.org/installing.html 系统:Ubuntu 注意!Pandoc 不能接受 PDF 作为输入!!!如果是想下载 Pandoc 做 PDF 格 ...
- H5完美适配刘海屏和状态栏高度的全机型解决方案攻略
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- ASP.NET Core Web API中操作方法中的参数来源
在ASP.NET Core Web API中,有多种方式可以传递参数给操作方法.以下是一些常见的参数传递方式: 路由参数(Route Parameters):参数值从URL的路由中提取. // Rou ...
- JuiceFS 企业版 5.2:迈入千亿文件时代,稳定性与性能再升级,首次支持 Windows 客户端
JuiceFS 企业版 5.2 版本近日发布,文件管理规模迈入千亿级.此次升级重点提升了超大规模集群的稳定性,优化了分布式缓存的网络性能,并增强了系统的易用性与安全性,旨在支持高并发访问等复杂的高性能 ...
- Spring Boot 集成Mybatis和Druid快速入门
MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架,它摒除了大部分的JDBC代码.手工设置参数和结果集重获,只使用简单的XML 和注解来配置和映射基本数据类型.Map 接口和POJ ...