E. Kuroni and the Score Distribution(思维构造)

题意: 给定数n,m, 让你构造一个n元数组a, 使得有m个不同的三元组满足 a [ i ] + a [ j ] = a [ k ] a[i] + a[j] = a[k] a[i]+a[j]=a[k]

数据范围 : 1 ≤ n ≤ 5000 , 0 ≤ m ≤ 1 0 9 1\leq n \leq 5000, 0 \leq m \leq 10^9 1n5000,0m109

Face

stragety: 考虑构造 数列1, 2, 3, 4…, 并且,依次处理出val[i], 表示前i个数最多能构成多少组三元组, 可以打表也可以不打表, 然后找到小于等于m的最大val_x, 此时知道还差m - val_x组三元组没有构造出来, 咋么办 , 来看这组数据

n = 6 , m = 6 a [ ] { 1 , 2 , 3 , 4 , 5 } n = 6, m = 6\\ a[]\{1, 2, 3, 4, 5\} n=6,m=6a[]{ 1,2,3,4,5}
此时还差两组, 现在我想加一个数正好构造两组, 注意到3+4, 5+2都等于7, 于是想到, 差lef组三元组时就加上 2 ∗ c n t − 2 ∗ l e f + 1 2*cnt - 2*lef + 1 2cnt2lef+1 其钟cnt代表已经构造好的下标, 上组数据来看是5, 然后剩下的数绝对不能对答案有贡献, 考虑无穷大-in;

细节有点多

打表版:

#include <bits/stdc++.h>
#include <bits/extc++.h>

using namespace std;
#define _rep(n, a, b) for (ll n = (a); n <= (b); ++n)
#define _rev(n, a, b) for (ll n = (a); n >= (b); --n)
#define _for(n, a, b) for (ll n = (a); n < (b); ++n)
#define _rof(n, a, b) for (ll n = (a); n > (b); --n)
#define oo 998244353
#define ll long long
#define db double
#define eps 1e-8
#define bin(x) cout << bitset<10>(x) << endl;
#define what_is(x) cerr << #x << " is " << x << endl
#define met(a, b) memset(a, b, sizeof(a))
#define all(x) x.begin(), x.end()
#define pii pair<ll, ll>
#define pdd pair<db, db>
#define pi acos(-1.0)
const ll maxn = 2e4 + 100;
const ll mod = 1e9;
int val[]{
   0, 0, 1, 2, 4, 6, 9, 12, 16, 20, 25, 30, 36, 42, 49, 56, 64, 72, 81, 90, 
100, 110, 121, 132, 144, 156, 169, 182, 196, 210, 225, 240, 256, 272, 289, 306, 324, 342, 361, 380, 
400, 420, 441, 462, 484, 506, 529, 552, 576, 600, 625, 650, 676, 702, 729, 756, 784, 812, 841, 870, 
900, 930, 961, 992, 1024, 1056, 1089, 1122, 1156, 1190, 1225, 1260, 1296, 1332, 1369, 1406, 1444, 1482, 1521, 1560, 
1600, 1640, 1681, 1722, 1764, 1806, 1849, 1892, 1936, 1980, 2025, 2070, 2116, 2162, 2209, 2256, 2304, 2352, 2401, 2450, 
2500, 2550, 2601, 2652, 2704, 2756, 2809, 2862, 2916, 2970, 3025, 3080, 3136, 3192, 3249, 3306, 3364, 3422, 3481, 3540, 
3600, 3660, 3721, 3782, 3844, 3906, 3969, 4032, 4096, 4160, 4225, 4290, 4356, 4422, 4489, 4556, 4624, 4692, 4761, 4830, 
4900, 4970, 5041, 5112, 5184, 5256, 5329, 5402, 5476, 5550, 5625, 5700, 5776, 5852, 5929, 6006, 6084, 6162, 6241, 6320, 
6400, 6480, 6561, 6642, 6724, 6806, 6889, 6972, 7056, 7140, 7225, 7310, 7396, 7482, 7569, 7656, 7744, 7832, 7921, 8010, 
8100, 8190, 8281, 8372, 8464, 8556, 8649, 8742, 8836, 8930, 9025, 9120, 9216, 9312, 9409, 9506, 9604, 9702, 9801, 9900, 
10000, 10100, 10201, 10302, 10404, 10506, 10609, 10712, 10816, 10920, 11025, 11130, 11236, 11342, 11449, 11556, 11664, 11772, 11881, 11990, 
12100, 12210, 12321, 12432, 12544, 12656, 12769, 12882, 12996, 13110, 13225, 13340, 13456, 13572, 13689, 13806, 13924, 14042, 14161, 14280, 
14400, 14520, 14641, 14762, 14884, 15006, 15129, 15252, 15376, 15500, 15625, 15750, 15876, 16002, 16129, 16256, 16384, 16512, 16641, 16770, 
16900, 17030, 17161, 17292, 17424, 17556, 17689, 17822, 17956, 18090, 18225, 18360, 18496, 18632, 18769, 18906, 19044, 19182, 19321, 19460, 
19600, 19740, 19881, 20022, 20164, 20306, 20449, 20592, 20736, 20880, 21025, 21170, 21316, 21462, 21609, 21756, 21904, 22052, 22201, 22350, 
22500, 22650, 22801, 22952, 23104, 23256, 23409, 23562, 23716, 23870, 24025, 24180, 24336, 24492, 24649, 24806, 24964, 25122, 25281, 25440, 
25600, 25760, 25921, 26082, 26244, 26406, 26569, 26732, 26896, 27060, 27225, 27390, 27556, 27722, 27889, 28056, 28224, 28392, 28561, 28730, 
28900, 29070, 29241, 29412, 29584, 29756, 29929, 30102, 30276, 30450, 30625, 30800, 30976, 31152, 31329, 31506, 31684, 31862, 32041, 32220, 
32400, 32580, 32761, 32942, 33124, 33306, 33489, 33672, 33856, 34040, 34225, 34410, 34596, 34782, 34969, 35156, 35344, 35532, 35721, 35910, 
36100, 36290, 36481, 36672, 36864, 37056, 37249, 37442, 37636, 37830, 38025, 38220, 38416, 38612, 38809, 39006, 39204, 39402, 39601, 39800, 
40000, 40200, 40401, 40602, 40804, 41006, 41209, 41412, 41616, 41820, 42025, 42230, 42436, 42642, 42849, 43056, 43264, 43472, 43681, 43890, 
44100, 44310, 44521, 44732, 44944, 45156, 45369, 45582, 45796, 46010, 46225, 46440, 46656, 46872, 47089, 47306, 47524, 47742, 47961, 48180, 
48400, 48620, 48841, 49062, 49284, 49506, 49729, 49952, 50176, 50400, 50625, 50850, 51076, 51302, 51529, 51756, 51984, 52212, 52441, 52670, 
52900, 53130, 53361, 53592, 53824, 54056, 54289, 54522, 54756, 54990, 55225, 55460, 55696, 55932, 56169, 56406, 56644, 56882, 57121, 57360, 
57600, 57840, 58081, 58322, 58564, 58806, 59049, 59292, 59536, 59780, 60025, 60270, 60516, 60762, 61009, 61256, 61504, 61752, 62001, 62250, 
62500, 62750, 63001, 63252, 63504, 63756, 64009, 64262, 64516, 64770, 65025, 65280, 65536, 65792, 66049, 66306, 66564, 66822, 67081, 67340, 
67600, 67860, 68121, 68382, 68644, 68906, 69169, 69432, 69696, 69960, 70225, 70490, 70756, 71022, 71289, 71556, 71824, 72092, 72361, 72630, 
72900, 73170, 73441, 73712, 73984, 74256, 74529, 74802, 75076, 75350, 75625, 75900, 76176, 76452, 76729, 77006, 77284, 77562, 77841, 78120, 
78400, 78680, 78961, 79242, 79524, 79806, 80089, 80372, 80656, 80940, 81225, 81510, 81796, 82082, 82369, 82656, 82944, 83232, 83521, 83810, 
84100, 84390, 84681, 84972, 85264, 85556, 85849, 86142, 86436, 86730, 87025, 87320, 87616, 87912, 88209, 88506, 88804, 89102, 89401, 89700, 
90000, 90300, 90601, 90902, 91204, 91506, 91809, 92112, 92416, 92720, 93025, 93330, 93636, 93942, 94249, 94556, 94864, 95172, 95481, 95790, 
96100, 96410, 96721, 97032, 97344, 97656, 97969, 98282, 98596, 98910, 99225, 99540, 99856, 100172, 100489, 100806, 101124, 101442, 101761, 102080, 
102400, 102720, 103041, 103362, 103684, 104006, 104329, 104652, 104976, 105300, 105625, 105950, 106276, 106602, 106929, 107256, 107584, 107912, 108241, 108570, 
108900, 109230, 109561, 109892, 110224, 110556, 110889, 111222, 111556, 111890, 112225, 112560, 112896, 113232, 113569, 113906, 114244, 114582, 114921, 115260, 
115600, 115940, 116281, 116622, 116964, 117306, 117649, 117992, 118336, 118680, 119025, 119370, 119716, 120062, 120409, 120756, 121104, 121452, 121801, 122150, 
122500, 122850, 123201, 123552, 123904, 124256, 124609, 124962, 125316, 125670, 126025, 126380, 126736, 127092, 127449, 127806, 128164, 128522, 128881, 129240, 
129600, 129960, 130321, 130682, 131044, 131406, 131769, 132132, 132496, 132860, 133225, 133590, 133956, 134322, 134689, 135056, 135424, 135792, 136161, 136530, 
136900, 137270, 137641, 138012, 138384, 138756, 139129, 139502, 139876, 140250, 140625, 141000, 141376, 141752, 142129, 142506, 142884, 143262, 143641, 144020, 
144400, 144780, 145161, 145542, 145924, 146306, 146689, 147072, 147456, 147840, 148225, 148610, 148996, 149382, 149769, 150156, 150544, 150932, 151321, 151710, 
152100, 152490, 152881, 153272, 153664, 154056, 154449, 154842, 155236, 155630, 156025, 156420, 156816, 157212, 157609, 158006, 158404, 158802, 159201, 159600, 
160000, 160400, 160801, 161202, 161604, 162006, 162409, 162812, 163216, 163620, 164025, 164430, 164836, 165242, 165649, 166056, 166464, 166872, 167281, 167690, 
168100, 168510, 168921, 169332, 169744, 170156, 170569, 170982, 171396, 171810, 172225, 172640, 173056, 173472, 173889, 174306, 174724, 175142, 175561, 175980, 
176400, 176820, 177241, 177662, 178084, 178506, 178929, 179352, 179776, 180200, 180625, 181050, 181476, 181902, 182329, 182756, 183184, 183612, 184041, 184470, 
184900, 185330, 185761, 186192, 186624, 187056, 187489, 187922, 188356, 188790, 189225, 189660, 190096, 190532, 190969, 191406, 191844, 192282, 192721, 193160, 
193600, 194040, 194481, 194922, 195364, 195806, 196249, 196692, 197136, 197580, 198025, 198470, 198916, 199362, 199809, 200256, 200704, 201152, 201601, 202050, 
202500, 202950, 203401, 203852, 204304, 204756, 205209, 205662, 206116, 206570, 207025, 207480, 207936, 208392, 208849, 209306, 209764, 210222, 210681, 211140, 
211600, 212060, 212521, 212982, 213444, 213906, 214369, 214832, 215296, 215760, 216225, 216690, 217156, 217622, 218089, 218556, 219024, 219492, 219961, 220430, 
220900, 221370, 221841, 222312, 222784, 223256, 223729, 224202
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值