很远古的题,然后被虐爆了
math
核心思路就是先考虑
n
n
n个数都是平均值,然后这时候方差为零。
怎么在平均数不变的情况下改变方差呢?我们可以用这一种模式:假设让方差改变 2 d 2 2d^2 2d2,我们把一个值变成 u + d u+d u+d,一个变成 u − d u-d u−d,基于这种思路,我们可以先定一个较大的 n n n,然后每次找出最大的 d d d去消去方差,直到 0 0 0为止。
那么这个 n n n是多少呢?对于本题数据 20 20 20就足够了(当然数据宽松,你可以取得更大或枚举),原谅作者并不能说明为什么 20 20 20是足够的,留给读者自己思考吧。
//std的代码
#include<cstdio>
#include<cmath>
#define MAXN 1000
int A[MAXN+10];
int main()
{
freopen("math.in", "r", stdin);
freopen("math.out", "w", stdout);
int T, n, mu, v, tot, x;
long long nv;
scanf("%d", &T);
for(int i = 1; i <= T; i++)
{
scanf("%d%d", &mu, &v);
n = 20;
nv = 1LL * n * v;
tot = 0;
while(nv > 0)
{
x = (int)sqrt(nv/2);
A[++tot] = mu + x;
A[++tot] = mu - x;
nv -= 2LL * x * x;
}
while(tot < n)
A[++tot] = mu;
printf("%d\n", n);
for(int i = 1; i <= n; i++)
if(i==1)
printf("%d", A[i]);
else
printf(" %d", A[i]);
puts("");
}
fclose(stdout);
return 0;
}
小奇的数列
核心思路就是把 区间子串和 转化为 区间前缀的差。
对于每一个询问,我们把区间的每一个前缀插入到 s e t set set中,插入时查询一下前驱和后继,更新答案,时间复杂度 O ( n m log n ) O(nm\log n) O(nmlogn)。
这种做法明显过不了,但是考虑生日悖论,出现相同值的两个前缀概率是很高的,所以我们加入一个小优化,找到 0 0 0就直接跳出,会快很多 q w q qwq qwq。
#include <cstdio>
#include <set>
using namespace std;
const int M = 10005;
int read()
{
int x=0,flag=1;char c;
while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*flag;
}
int n,q,a[M];
int main()
{
n=read();q=read();
for(int i=1;i<=n;i++)
a[i]=read();
while(q--)
{
int l=read(),r=read(),p=read(),sum=0,ans=p;
set<int> s;
s.insert(0);
for(int i=l;i<=r;i++)
{
sum=(sum+a[i])%p;
set<int> :: iterator it=s.lower_bound(sum);
if(it!=s.end() && (*it)==sum)
{
ans=0;
break;
}
if(it!=s.end())
ans=min(ans,((sum-(*it))%p+p)%p);
if(it!=s.begin())
{
it--;
ans=min(ans,((sum-(*it))%p+p)%p);
}
s.insert(sum);
}
printf("%d\n",ans);
}
}
Tree
我第一眼看这不是树套树板题吗?然后一发树套树
MLE
\text{MLE}
MLE
正解是树链剖分维护路径异或和,这不是位运算常识吗?我搞得这么复杂。
没关系,就当练码力了吧,树套树万岁!代码就不贴了,相信你们都写得来。
后记
又被打击了一次,虽说就是平时的一个小测。
遇到问题就多想想,并不是所有题都是树套树,其他的,就是有些实在没想到吧 😔
然后就是
AK
\color{red}\text{AK}
AK 奆佬
S
Y
\color{blue}{SY}
SY 的一波在线嘲讽:
加油吧
q
w
q
qwq
qwq,争取下次嘲讽
S
Y
\color{blue}{SY}
SY 奆佬。