【AKOI2019暑期欢乐模拟赛】T1 签到题 题解

原题链接: 题意:略

出题人的碎碎念

T 1 T1 T1是真心送温暖,可惜…… 如此水沝淼㵘的结论题竟然在开局搞蒙了大部分人? 这道题的正解其实不太好推,但是数据实在太裸,瞎蒙个结论都能过。 的确有不少人的瞎蒙是正确的。但是不是忘了开long long就是忘了return 0(各种千奇百怪的错法?) 温暖没送成,鸭蛋倒是送了一堆。

解法一

正常人的思路: 暴力打表/人脑计算。直接算出 k = 1 k=1 k=1~ 5 5 5的答案,观察规律。 不难发现 n n n 永远可取 1 , 2 , 3 , . . . , k 1,2,3,...,k 1,2,3,...,k ,因此输出 1 1 1至 k k k的平方和即可。用公式半分钟切掉。

解法二

什么?你想知道正解?那就让我们来推一推。 由于 x 1 , x 2 , . . . , x k ∈ N ∗ x_1,x_2,...,x_k∈N^* x1,x2,...,xk∈N∗ 且 x 1 &lt; x 2 &lt; . . . &lt; x k x_1&lt;x_2&lt;...&lt;x_k x1<x2<...<xk 所以 x 1 ≥ 1 , x 2 ≥ 2 , . . . , x k ≥ k x_1≥1,x_2≥2,...,x_k≥k x1≥1,x2≥2,...,xk≥k,即 x i ≥ i x_i≥i xi≥i 于是 n = ∑ i = 1 k i x i ≤ ∑ i = 1 k i i = k n=sum_{i=1}^{k} frac{i}{x_i} ≤ sum_{i=1}^{k} frac{i}{i}=k n=∑i=1kxii≤∑i=1kii=k 当 n = 1 n=1 n=1 时,不妨令 x 1 = k , x 2 = 2 ⋅ k , . . . , x k = k ⋅ k x_1=k,x_2=2·k,...,x_k=k·k x1=k,x2=2⋅k,...,xk=k⋅k 则 ∑ i = 1 k i x i = 1 sum_{i=1}^{k} frac{i}{x_i}=1 ∑i=1kxii=1 当 n = t + 1 n=t+1 n=t+1 时,其中 1 ≤ t ≤ k − 1 1≤t≤k-1 1≤t≤k−1,不妨令 x 1 = 1 , x 2 = 2 , . . . , x t = t x_1=1,x_2=2,...,x_t=t x1=1,x2=2,...,xt=t, x t + 1 = ( k − t ) ( t + 1 ) , x t + 2 = ( k − t ) ( t + 2 ) , . . . , x k = ( k − t ) ⋅ k x_{t+1}=(k-t)(t+1),x_{t+2}=(k-t)(t+2),...,x_k=(k-t)·k xt+1=(k−t)(t+1),xt+2=(k−t)(t+2),...,xk=(k−t)⋅k 则 ∑ i = 1 k i x i = t + ( k − t ) ⋅ 1 k − t = t + 1 = n sum_{i=1}^{k} frac{i}{x_i}= t+(k-t)·frac{1}{k-t}=t+1=n ∑i=1kxii=t+(k−t)⋅k−t1=t+1=n 综上所述,所有满足条件的正整数 n n n 为 1 , 2 , . . . , k 1,2,...,k 1,2,...,k 故答案为 ∑ i = 1 k sum_{i=1}^{k} ∑i=1k i 2 = k ( k + 1 ) ( 2 k + 1 ) 6 . i^2= frac {k(k+1)(2k+1)}{6}. i2=6k(k+1)(2k+1).

Code

我们学校有一个(两个?)人叫CY,他想AK IOI.

#include <iostream>
#include <stdio.h>
#define A using namespace std;
#define dalao int main()
#define called {
          
   
#define CY long long n;
#define will scanf("%lld",&n);
#define AK printf("%lld",n*(n+1)*(n*2+1)/6);
#define IOI return 0;
#define Orz }
A dalao called CY will AK IOI Orz

这是C++,不是Ja**,也不是Py****,更不是@#$%^&

经验分享 程序员 微信小程序 职场和发展