小红的构造题(构造)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小红的构造题(构造)相关的知识,希望对你有一定的参考价值。
小红的构造题(构造)
考虑 r e d a 1 r e d d 2 … r e d d k red^a_1red^d_2\\dots red^d_k reda1redd2…reddk
第 k k k个 r e re re后加 a k a_k ak个 d d d。
那么贡献就是: a k + 2 a k + 3 a k ⋯ + k a k = a k k ( k + 1 ) 2 a_k+2a_k+3a_k\\dots +ka_k=\\dfraca_kk(k+1)2 ak+2ak+3ak⋯+kak=2akk(k+1)
假设 a i = 1 a_i=1 ai=1
那么至少要用 ∑ i = 1 k i ( i + 1 ) 2 ≥ n \\sum _i=1^k\\dfraci(i+1)2\\ge n ∑i=1k2i(i+1)≥n
找到这个 k k k。
这个求和式子化简:
k ( k + 1 ) ( k + 3 ) 6 ≥ n \\dfrack(k+1)(k+3)6\\ge n 6k(k+1)(k+3)≥n
k k k是 O ( n 1 3 ) ≤ 2 e 5 O(n^\\dfrac13)\\le 2e5 O(n31)≤2e5
然后倒着一边除算 a i a_i ai,一般对 n n n取余即可。
// Problem: 小红的构造题
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11251/D
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// Date: 2022-08-11 14:21:12
// --------by Herio--------
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define ios ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);
template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;
template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;
int a[N];
ll f(ll i)
return i*(i+1)>>1;
int main()
ll n;cin>>n;
ll i;
if(!n) return puts("d"),0;
for(i=1;i*(i+1)*(i+3)/6<=n;i++);
i--;
for(int x=i;x;x--)
a[x] = n/f(x);
n%=f(x);
rep(x,1,i)
cout<<"re";
while(a[x]--)cout<<"d";
return 0;
以上是关于小红的构造题(构造)的主要内容,如果未能解决你的问题,请参考以下文章