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 ...
随机推荐
- Java 的 CMS 垃圾回收流程
Java 的 CMS 垃圾回收流程 CMS(Concurrent Mark-Sweep)垃圾回收器 是一种并发垃圾回收器,旨在减少垃圾回收时的停顿时间,适用于对低延迟要求较高的应用.CMS 主要通过并 ...
- Full GC 频率优化实战
作者:vivo 互联网服务器团队- Li Gang 本文介绍了游戏业务使用MAT和GC日志等工具对 Full GC频率进行优化的过程. 一.背景 游戏业务面对用户端的某个工程,每天Full GC频率达 ...
- 腾讯Java后端一面,被速通了!
分享一篇腾讯的后端Java一面凉经,被速通了, 大家感受一下难度如何. 这次面试的考察覆盖了从 项目经验的深度挖掘(面试官非常看重 STAR 法则的应用)到 扎实的计算机基础(经典的 TCP/UDP ...
- 把 MCP Server 打包进 VS Code extension
大家好!我是韩老师. 本文是 MCP 系列文章的第六篇,之前的五篇是: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! ...
- 如何在 Linux 上检查开放的端口并关闭不需要的端口
检查服务器开放端口并关闭不必要的端口是网络安全管理中的关键环节,开放端口如同服务器的"窗口",若其中存在未被利用或未受保护的端口,就如同为潜在的攻击者敞开了大门,他们可能会利用这些 ...
- HarmonyOS NEXT开发实战案例--圆盘
这是之前写过的一个项目,后来删掉了,现在适配到api12重新发布,友友们按需查阅. 本文主要通过抽奖转盘小项目讲解在鸿蒙开发中如何使用画布组件Canvas绘制图形和文字,以及转圈动画的实现.效果图如下 ...
- C#之Stream和IO
C#之Stream和IO public class test { public int aa = 100; public string testStr = "test"; publ ...
- SynchronizedHashMap和ConcurrentHashMap的区别
ConcurrrentHashMap ConcurrentHashMap 使用锁分离技术来保证在多线程下的性能.它每次锁住一个桶,默认将 hash 表分为 16 个桶,诸如put和remove 等 ...
- 在Matlab中如何计算决定系数R^2和相关系数r
Problem 当你使用 polyfit 函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何.聪明的你肯定觉得聪明的 Matlab 的 polyfit 函数的返回值中会有 \(R^ ...
- 校内NOI模拟赛006T1 签到sign 线性基
感想 这道题还算良心,有30pts的暴力--但是这次模拟赛又双叒叕是勒堕赛制,而且试题的标题居然还是NOI模拟测试!打暴力的时候我也没有想到我可以现学现卖一个线性基呢... 数据又是脚造的( 虽然标题 ...