\(\mathtt{Link}\)

传送门

\(\mathtt{Summarization}\)

给定一个长度为 \(n\) 的序列 \(a\),求是否有一种排序方案使得 \(\sum_{i=1}^n\sum_{j=i}^n\dfrac{a_j}{j} = m\)。

\(\mathtt{Solution}\)

显然 \(a\) 序列中某些数字被处理并累加过若干次,不妨先把所有数处理掉,考虑每个都加了多少次。

比如这样一个序列:\(a_1, a_2, a_3, a_4, a_5\)

先处理该序列,变成:\(\dfrac{a_1}{1}, \dfrac{a_2}{2}, \dfrac{a_3}{3}, \dfrac{a_4}{4}, \dfrac{a_5}{5}\)。

那么问题就可以转化成这样一个被处理的序列,求是否 \(\sum_{i=1}^n\sum_{j=i}^na_j = m\)。

你会发现,在 \(a_j\) 这个位置的数正好被累计了 \(j\) 次

因为 \(1 \le i \le j\) 的时候,每次累计了 \(1\) 次 \(a_j\),总共就是 \(j\) 次;但是当 \(j < i \le n\) 的时候,就累计不到 \(a_j\) 了。

那么问题其实要求的就是 \(\dfrac{a_1}{1} \times 1 + \dfrac{a_2}{2} \times 2 + \dfrac{a_3}{3} \times 3 + \dfrac{a_4}{4} \times 4 + \dfrac{a_5}{5} \times 5\)。你会惊奇的发现,分母都能和后面的乘数,相约,也就是最后变成了 \(a_1 + a_2 + a_3+a_4+a_5\)

换句话讲,就是说 \(\sum_{i=1}^n\sum_{j=i}^n\dfrac{a_j}{j} = \sum_{i=1}^na_i\)。

问题也就转化成是否有一种排序方式使得这个序列的和为 \(m\)

我们知道,因为加法交换律,因此在不加数不删数不改数的情况下,这个序列无论怎么排序,和都是固定的

那么,

  • 如果这个序列的和是 \(m\),就一定有解
  • 如果这个序列的和不是 \(m\),就没解了

该算法时间复杂度为 \(\mathcal{O}(n)\)。

\(\mathtt{Code}\)

/** @Author: crab-in-the-northeast * @Date: 2020-10-25 08:28:22 * @Last Modified by: crab-in-the-northeast* @Last Modified time: 2020-10-25 08:37:06*/
#include <iostream>
#include <cstdio>const int maxn = 10005;
int a[maxn];int main() {int t;std :: scanf("%d", &t);while (t--) {int n, m;std :: scanf("%d %d", &n, &m);for (int i = 1; i <= n; ++i)std :: scanf("%d", &a[i]);int sum = 0;for (int i = 1; i <= n; ++i)sum += a[i];if (sum == m)puts("YES");elseputs("NO");    }
}

\(\mathtt{More}\)

此题通过贡献思想巧妙的将问题简单化。

[CF1436A] Reorder相关推荐

  1. leetcode之Reorder List

    Given a singly linked list L: L0→L1→-→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do th ...

  2. R语言dplyr包数据列重排(reorder)实战:把特定数据列移动到第一列、把特定数据列移动到最后一列、数据列多列重排、按照字母顺序重排数据列、把数据列反序

    R语言dplyr包数据列重排(reorder)实战:把特定数据列移动到第一列.把特定数据列移动到最后一列.数据列多列重排.按照字母顺序重排数据列.把数据列反序 目录

  3. R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图、并对哑铃图进行排序(reorder dumbbell plot)

    R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图.并对哑铃图进行排序(reorder dumbbell plot) 目录

  4. ggplot2可视化水平箱图并使用fct_reorder排序数据、使用na.rm处理缺失值(reorder boxplot with fct_reorder)、按照箱图的中位数从小到大排序水平箱图

    ggplot2可视化水平箱图并使用fct_reorder排序数据.使用na.rm处理缺失值(reorder boxplot with fct_reorder).按照箱图的中位数从小到大排序水平箱图(O ...

  5. R对因子变量的等级进行重新排序(Reorder Factor Levels)

    R对因子变量的等级进行重新排序(Reorder Factor Levels) 目录 R对因子变量的等级进行重新排序(Reorder Factor Levels) 因子等级重排

  6. LeetCode:937. Reorder Log Files

    051401 题目 You have an array of logs. Each log is a space delimited string of words. For each log, th ...

  7. Leetcode PHP题解--D54 937. Reorder Log Files

    D54 937. Reorder Log Files 题目链接 937. Reorder Log Files 题目分析 给定一个数组,每一个元素是一条"日志". 每一条日志的第一个 ...

  8. LeetCode - Reorder List

    Reorder List 2014.1.13 22:07 Given a singly linked list L: L0→L1→-→Ln-1→Ln, reorder it to: L0→Ln→L1→ ...

  9. G面经prepare: Reorder String to make duplicates not consecutive

    字符串重新排列,让里面不能有相同字母在一起.比如aaabbb非法的,要让它变成ababab.给一种即可 Greedy: 跟FB面经Prepare task Schedule II很像,记录每个char ...

最新文章

  1. python通过端口和协议查出服务名
  2. android 百度定位开启后fragment 不显示,解决Android百度地图MapView在ViewPager中Fragment切换黑屏问题...
  3. linux oracle手动启动两个实例
  4. Java EE调度程序
  5. python决策树逻辑回归_百面机器学习(逻辑回归以及决策树,leetcode)
  6. final string 堆区 栈区 java_JVM内存初学 堆、栈、方法区
  7. aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)
  8. 最为完整的gdb调试
  9. 以太坊 智能合约IDE 在线 Solidity IDE
  10. 火狐浏览器书签工具栏固定书签宽度
  11. win10环境下如何安装CAD
  12. LaTeX插入参考文献并引用
  13. Windows域/域树/域林的简单区别
  14. 【JSTL】choose标签
  15. 加拿大计算机竞赛答案,加拿大数学和计算机竞赛.doc
  16. 拓嘉启远:怎样做拼多多推广见效是比较快的
  17. 云服务器,liunx服务器上的图片通过浏览器访问
  18. 今日冬至《心的深处》孙溟㠭篆刻艺术
  19. Scrum立会报告+燃尽图(Beta阶段第五次)
  20. 置液晶显示器的台式计算机,能为液晶显示器提供直流电的台式计算机电源的制作方法...

热门文章

  1. 同步器Synchronizer
  2. 苹果手机热点总断开怎么办?
  3. PHPExcel中文开发手册翻译版(2)
  4. 计算机桌面备份在哪里,怎样备份系统,文件备份在哪里
  5. 关于C语言二级机考软件环境的一些问题
  6. C# 计算指定年月的当月工作日方法
  7. QQ合并的聊天记录可以通过什么方式转换成链接,点开链接就能看合并的聊天记录?
  8. 电大计算机理工英语19年秋季,国家开放大学2020年秋季学期电大《理工英语1》形成性考核答案...
  9. 求助-强化学习基础-K-摇臂老虎机Python
  10. 算法实现: OTP(One-Time Pad) 一次一密密码本 加解密