原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-Wannafly27E.html

题目传送门 - NowCoder Wannafly 27E

题意

  给出 n, k,求一个长度为 n 的数组 a, 满足有恰好 k 对数对 (i, j) (1 <= i < j <= n) 满足 ai + aj 为完全平方数。如果不存在,输出 -1。

题解

  首先考虑最大能构造多少:

  容易发现,全部填 2 就是 n(n-1)/2 最大了。然后猜一猜小于等于这个的都是有解的。

  首先,找到满足 m(m-1)/2<=k 的最大 m , 则 k = 1+2+ … + m + x

  我们考虑构造这 m+1 个数来达到目的,假装其他的数不影响结果,设为 d 。

  于是可以想到一种构造方案:

  找到正整数 a,b,c,d ,满足:

    a+b,a+a,b+b,b+c 是完全平方数

    a+c,a+d,b+d,c+d,d+d,c+c 不是完全平方数。

  那么,我们考虑分 x = 0 和 x>0 讨论:

  如果 x = 0 ,那么直接放 m 个 a 然后其他的放 d 就好了。

  如果 x > 0 ,那么放 m-x 个 a,x 个 b,放一个 c ,剩下的放 d 即可。

  手造出这样的 abcd 比较麻烦,但是这样的 abcd 在 10w 范围内显然是很容易找的,直接写个代码暴搜即可。

  由于 我太懒了,直接用了 珂爷 的: a=98,b=2,c=7 。我 d 随便取了个 1 。

  话说 珂爷 太巨了,E 题一血虐场 Orz 。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=100005;
LL read(){LL x=0;char ch=getchar();while (!isdigit(ch))ch=getchar();while (isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x;
}
LL n,k;
int a=98,b=2,c=7,d=1;
vector <int> v;
int main(){n=read(),k=read();if (n*(n-1)/2<k)return puts("-1"),0;if (!k){for (int i=1;i<=n;i++)printf("1 ");return 0;}v.clear();while ((n-1)*(n-2)/2>=k){v.push_back(d);n--;}if (n*(n-1)/2==k)for (int i=1;i<=n;i++)v.push_back(a);else {v.push_back(c);LL rem=k-(n-1)*(n-2)/2;for (int i=1;i<=rem;i++)v.push_back(b);for (int i=n-1-rem;i>=1;i--)v.push_back(a);}for (auto i : v)printf("%d ",i);return 0;
}

  

转载于:https://www.cnblogs.com/zhouzhendong/p/NowCoder-Wannafly27E.html

NowCoder Wannafly 27E 黄魔法师 构造相关推荐

  1. Wannafly挑战赛27: E. 黄魔法师(构造)

    链接:https://www.nowcoder.com/acm/contest/215/E 来源:牛客网 题目描述 "恕瑞玛,你的皇帝回来啦!"--黄魔法师 给出 n, k,求一个 ...

  2. 【nowcoder Wannafly挑战赛24 F】 wyf的超级多项式【FFT/NTT】【构造】

    题目传送门 停更已久的blog... orz ckw大佬 我们考虑构造 f f f的递推式.我们设有数组 c c c,满足 f [ n ] = ∑ i = 1 k c [ i ] × f [ n − ...

  3. 退役前的最后的做题记录upd:2019.04.04

    考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...

  4. 杂题记录及简要题解(一)

    一些前几天做过的还不错的但是不是太想专门花一整篇博客的篇幅去写的题就简要地记录在这里. 说是简要题解,其实写得还是挺详细的.之后的杂题记录可能就会写得简略一点. CF1060E Sergey and ...

  5. NOWCODER 白魔法师(图,并查集)

    链接:https://ac.nowcoder.com/acm/problem/205460 来源:牛客网 思路: 图的并查集,只能染色一次,如果全是白点,输出大小n即可,否则只能将黑点染色成白点才有可 ...

  6. nowcoder (牛客)Wannafly挑战赛26 B: 冥土追魂 (思维)

    链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言104 ...

  7. 快到十月份了希望到时候中期通过并拿到offer,恐惧又憧憬未来的小黑的leetcode之旅:1008. 前序遍历构造二叉搜索树 三轮面试通过。准备和老黑们和阿黄吃海底捞~

    小黑做法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, r ...

  8. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  9. 【瓜分5000元奖金】Wannafly挑战赛13

    链接:https://www.nowcoder.com/acm/contest/80/A 来源:牛客网 zzy的小号 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...

最新文章

  1. R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
  2. python解初中题_用python解一道数独小题
  3. 科技发烧友之单反佳能700d中高端
  4. count(*),count(1),count(0)效率
  5. php 价格计算方法,PHP算法逻辑:如何计算购买量?
  6. 第四篇:整合Thymeleaf模板
  7. 4位双扫描、8位单扫描
  8. 【深入理解JVM】引用,句柄,指针分别是什么?
  9. Linux操作系统相关命令
  10. 判断是否是ie浏览器 前端js_jquery判断是否为ie浏览器的方法
  11. java实现大写转小写_java实现将大写字母转换为小写字母
  12. [源码]VB6.0操作注册表
  13. ShenYu网关数据同步源码分析
  14. 数据应用系统的压力测试方案
  15. NetFlix 服务注册与发现 Eureka
  16. utf8字符集中漢字默認占三個字節
  17. Android主线程耗时方法监控
  18. @CacheEvict注解,清除缓存
  19. 病案系统实施-基本知识-持续更新
  20. LaTeX期刊论文写作

热门文章

  1. aes256 java_用Java进行AES256
  2. Linux下Oracle数据库安装详解
  3. Python接入PayPal支付
  4. 深度强化学习入门:马尔可夫决策过程(井字棋案例理解)
  5. 码匠编程:H5到底是指什么? 一文给你梳理清楚
  6. 达人评测 i9 13900H 和i7 12700h差多少 酷睿i913900H 和i712700h对比
  7. .NET中XUnit和NUNIT对比
  8. [bzoj1018] [SHOI2008]堵塞的交通
  9. JavaScript toDataURL图片转换问题
  10. 聚类算法评价指标——Normalized Mutual Information, NMI指数