AtCoder Regular Contest 163 C. Harmonic Mean(构造 补写法)

news/2024/11/17 21:55:29/

题目

t(t<=500)组case,

给定一个数n(n<=500),构造一个长为n的数组

思路来源

官方题解

题解

注意到\frac{1}{k*(k+1)}=\frac{1}{k}-\frac{1}{k+1}

\frac{1}{2}=\frac{1}{3}-\frac{1}{6}

\frac{1}{6}=\frac{1}{3}-\frac{1}{4}

\frac{1}{12}=\frac{1}{4}-\frac{1}{5}

...

所以,

1. 当n没有在前面的序列里出现过时,可以用(2,6,12,...,n)来构造一组解

2. 当出现过时,例如当n=6时,序列为(2,6,12,20,30,6)不能满足条件

此时,我们先构造(2,6,12,20,5),五个数,

然后将每个数乘以2,再将2放回来

即得到(2,4,12,24,40,10),满足题意

①n冲突的时候,n-1一定不会冲突,因为前面的序列是i*(i+1)的格式,不存在两个相邻的数

②n个数倒数求和=1,每个数乘以2后倒数求和=1/2,再加上1/2即为1,

由于一开始没有1,所以也不会冲突

代码1

#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const int N=5e5+10,up=1e9;
int t,n;
void sol(){scanf("%d",&n);if(n==2){puts("No");return;}if(n==1){puts("Yes\n1");return;}vector<int>ans;bool no=0;for(int i=1;i<n;++i){ans.push_back(i*(i+1));no|=(i*(i+1)==n);}if(no){ans.pop_back();ans.push_back(n-1);for(auto &v:ans)v*=2;ans.push_back(2);}else{ans.push_back(n);}puts("Yes");for(auto &v:ans)printf("%d ",v);puts("");
}
int main(){scanf("%d",&t);while(t--){sol();}return 0;
}

代码2(我的乱搞)

也是基于这个等式,用最大的数一拆二扩展,直至满足n个数,

[1,1e9]值域很宽,冲撞的可能性很小很小

#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const int N=5e5+10,up=1e9;
int t,n;
void sol(){scanf("%d",&n);if(n==2){puts("No");return;}if(n==1){puts("Yes\n1");return;}priority_queue<int>q;map<int,int>now;int c=3;for(auto &v:{2,3,6}){q.push(v);now[v]=1;}while(c<n){int x=q.top();q.pop();if(1ll*x*(x+1)<=up){int v=x*(x+1);if(!now[x+1] && !now[v]){now[x]--;now[x+1]++;now[v]++;q.push(x+1);q.push(v);c++;}}}puts("Yes");for(auto &v:now){if(v.second)printf("%d ",v.first);}puts("");
}
int main(){scanf("%d",&t);while(t--){sol();}return 0;
}


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

相关文章

大家好,给大家介绍一下,这是刚出炉的 @ 明星受众报告

欢迎大家前往腾讯云技术社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 作者&#xff1a; 倩倩&#xff0c;发布于腾讯大数据 最近,鹿晗爆出了与关晓彤的恋情 2天时间这条宣布恋情的微博光点赞就有509万&#xff01; 一瞬间微博和娱乐圈都炸了! 两人恋情公布后&#xff0c;…

“用户画像”是高能的概括----梁宁产品思维30讲读书笔记201807

看过《枪王》、《枪王之王》的老人家们&#xff0c;肯定被各种帅到。里面的方中信&#xff0c;有一种神奇的力量&#xff1a;能代入犯人思维&#xff0c;尝试“画”出疑犯的“个人特征、性格、习惯”等&#xff0c;成为“画像”&#xff1b;最近也有一部突出类似“画像”能力的…

“僵尸”横行的APP市场:如何才能击中用户High点?

据不完全统计目前WindowsPhoneStore应用数量已经超过15万款&#xff0c;GooglePlay的应用数量已接近80万&#xff0c;苹果IOS应用数量为85万多款&#xff0c;当然&#xff0c;这一数字也在加速攀升&#xff0c;不过&#xff0c;在数百万个应用软件中&#xff0c;绝大多数成为“…

武汉新时标文化传媒有限公司抢夺用户最关键的是建立用户认知

一. 抢用户&#xff0c;抢夺时间&#xff1a;讨好年轻人 互联网的竞争就是用户的抢夺之战——用户就那么多&#xff0c;用户的时间就那么多。 玩抖音的人多了&#xff0c;玩微信的就少了&#xff1b;玩抖音的时间多了&#xff0c;玩微信的时间就少了。这是一群荷尔蒙过剩的年…

蔡徐坤用户画像

来源&#xff1a;挖数 作者&#xff1a;挖数 互联网行业经常会做用户调研&#xff0c;通过线下访谈和线上埋点等方式收集用户数据后&#xff0c;最终形成产品主流用户的性别、年龄、职业、喜好、城市等标签数据&#xff0c;这个过程称为“用户画像”。 如果蔡徐坤是一款互联网产…

用户信息管理系统测试报告

目录 一、测试环境二、系统测试三、测试用例四、单元测试1、登录测试2、添加测试3、删除测试4、ID查找测试5、更新测试6、条件查找测试7、返回符合条件的用户数测试 一、测试环境 项目用户信息管理系统操作系统WIN 10环境IDEA 二、系统测试 三、测试用例 四、单元测试 使用J…

时间序列分解 | Matlab变分模态分解(VMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab变分模态分解(VMD)的信号分解 部分源码 %--------------------

mathtype输入latex的花体,如L,I,O等

1、预置-剪切和复制预置-mathML或Tex&#xff0c;取消两个勾勾&#xff0c;点确定。 2、预置-工作区预置-勾上&#xff1a;允许从键盘输入Tex语言&#xff0c;点确定。 3、直接在mathtype输入即可 以下是几个常用的例子&#xff1a; mathcal——花体、书法字体&#xff08;ca…