Submission #70271930


Source Code Expand

#include<bits/stdc++.h>
//bool Mst;
using namespace std;
namespace wyzfastio
{
	const char bool_str[2][6]={"false","true"};const int double_mx=12;
//#define usefio
#ifdef usefio
	namespace __getchar{const int bufsize=1<<22;char buf[bufsize],*p1=buf,*p2=buf;inline char getchar(){return (p1==p2&&(p2=(p1=buf)+fread(buf,1,bufsize,stdin),p1==p2))?EOF:(*p1++);}}using __getchar::getchar;
	namespace __putchar{const int bufsize=1<<22;char buf[bufsize],*p=buf;inline void putchar(const char ch){if(p-buf==bufsize) fwrite(buf,1,bufsize,stdout),p=buf;*p++=ch;}inline void flush(){fwrite(buf,1,p-buf,stdout);}}using __putchar::putchar;using __putchar::flush;
	namespace __flusher{struct Flusher{Flusher(){}~Flusher(){flush();}}flusher;}
#endif
	struct istream{void tie([[maybe_unused]]int x){}};struct ostream{void tie([[maybe_unused]]int x){}};struct estream{};istream in;ostream out;
#ifdef LOCAL
	ostream err;
#else
	estream err;
#endif
	istream &operator>>(istream &in,char &s){s=getchar();while(s==' '||s=='\n'||s=='\r')s=getchar();return in;}
	istream &operator>>(istream &in,std::string &s){char ch=getchar();s.clear();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();while(!(ch==' '||ch=='\n'||ch=='\r'||ch==EOF))s+=ch,ch=getchar();return in;}
	istream &operator>>(istream &in,__int128 &x){char ch=getchar();int o=0;__int128 r=0;while(ch<'0'||ch>'9'){if(ch=='-')o^=1;ch=getchar();}while(ch>='0'&&ch<='9')r=(r<<3)+(r<<1)+ch-'0',ch=getchar();x=o?-r:r;return in;}
	istream &operator>>(istream &in,unsigned __int128 &x){char ch=getchar();__int128 r=0;while(ch>='0'&&ch<='9')r=(r<<3)+(r<<1)+ch-'0',ch=getchar();x=r;return in;}
	template<typename _Tp>inline typename std::enable_if<std::is_integral<_Tp>::value&&!std::is_same<_Tp,bool>::value,istream &>::type operator>>(istream &in,_Tp &x){char ch=getchar();int o=0;_Tp r=0;while(ch<'0'||ch>'9'){if(ch=='-')o^=1;ch=getchar();}while(ch>='0'&&ch<='9')r=(r<<3)+(r<<1)+ch-'0',ch=getchar();x=o?-r:r;return in;}
	template<typename _Tp>inline typename std::enable_if<std::is_same<_Tp,bool>::value,istream &>::type operator>>(istream &in,_Tp &x){int r;in>>r;x=r;return in;}
	template<typename _Tp>inline typename std::enable_if<std::is_floating_point<_Tp>::value,istream &>::type operator>>(istream &in,_Tp &x){_Tp r=0,p=1;int op=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')op=-op;ch=getchar();}while(ch>='0'&&ch<='9'){r=r*10+ch-'0';ch=getchar();}if(ch=='.'){ch=getchar();while(ch>='0'&&ch<='9')r+=(p*=0.1)*(ch-'0'),ch=getchar();}x=r*op;return in;}
	ostream &operator<<(ostream &out,const char x){putchar(x);return out;}
	ostream &operator<<(ostream &out,const char *s){while(*s!='\0'&&*s!=EOF)putchar(*s),s++;return out;}
	ostream &operator<<(ostream &out,std::string s){for(char ch:s)putchar(ch);return out;}
	ostream &operator<<(ostream &out,__int128 x){static int __stk[66];int top=0,op=1-((x<0)<<1);if(x==0)__stk[top++]=0;else while(x)__stk[top++]=(x%10)*op,x/=10;if(op==-1)putchar('-');while(top)putchar(__stk[--top]+'0');return out;}
	ostream &operator<<(ostream &out,unsigned __int128 x){static int __stk[66];int top=0;if(x==0)__stk[top++]=0;else while(x)__stk[top++]=(x%10),x/=10;while(top)putchar(__stk[--top]+'0');return out;}
	template<typename _Tp>inline typename std::enable_if<std::is_integral<_Tp>::value&&!std::is_same<_Tp,bool>::value,ostream &>::type operator<<(ostream &out,_Tp x){static int __stk[33];int top=0,op=1-((x<0)<<1);if(x==0)__stk[top++]=0;else while(x)__stk[top++]=(x%10)*op,x/=10;if(op==-1)putchar('-');while(top)putchar(__stk[--top]+'0');return out;}
	template<typename _Tp>inline typename std::enable_if<std::is_same<_Tp,bool>::value,ostream &>::type operator<<(ostream &out,_Tp x){out<<bool_str[x];return out;}
	template<typename _Tp>inline typename std::enable_if<std::is_floating_point<_Tp>::value,ostream &>::type operator<<(ostream &out,_Tp x){if(x<0)putchar('-'),x=-x;static int __stk[233];int top=0;for(int i=0;i<double_mx;i++)x*=10;x=std::floor(x+0.5);for(_Tp y;x>=1;)y=std::floor(x/10),__stk[top++]=x-y*10,x=y;while(top<=double_mx)__stk[top++]=0;while(top>double_mx)putchar(__stk[--top]+'0');putchar('.');while(top)putchar(__stk[--top]+'0');return out;}
	template<typename _Tp>inline estream &operator<<(estream &err,[[maybe_unused]]_Tp x){return err;}
#define cin wyzfastio::in
#define cout wyzfastio::out
#define cerr wyzfastio::err
}
using ll=long long;
using ld=long double;
#define int ll
using pii=pair<int,int>;
const int N=5e5+5,mod=998244353;
inline int qpow(int a,ll b,int M=mod){int res=1;while(b){if(b&1)res=1ll*res*a%M;b>>=1,a=1ll*a*a%M;}return res;}
int a[N],f[21][N],rt[21][N],inv[21],phi[21];
//bool Med;
signed main()
{
//	cerr<<"Memory Size: "<<abs((&Med)-(&Mst))/1024.0/1024<<" MB\n";
//	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//	freopen("in.in","r",stdin);
//	freopen("out.out","w",stdout);
	int n,v;
	cin>>n>>v;
	for(int i=1,x;i<=n;i++) cin>>x,a[x]++;
	f[0][1]=1;
	for(int i=0;i<20;i++)
		for(int s=1;s<=v;s++)
			for(int t=1;s*t<=v;t++)
				(f[i+1][s*t]+=f[i][s]*a[t])%=mod;
	for(int i=1;i<=20;i++) inv[i]=qpow(i,mod-2);
	for(int i=1;i<=20;i++) for(int j=1;j<=i;j++) phi[i]+=__gcd(i,j)==1;
	for(int i=1;i<=v;i++) for(int j=1,pw=i;j<=20&&pw<=v;j++,pw*=i) rt[j][pw]=i;
	auto calc=[&](int x)->int
	{
		int ans=0;
		for(int l=1;l<=20;l++)
		{
			int res=0;
			for(int d=1;d<=l;d++) if(!(l%d)&&rt[d][x]) res=(res+phi[d]*f[l/d][rt[d][x]])%mod;
			ans=(ans+res*inv[l])%mod;
		}
		return ans;
	};
	for(int i=2;i<=v;i++) cout<<calc(i)<<" ";
	cout<<"\n";
	return 0;
}

Submission Info

Submission Time
Task G - Necklace
User wangyizhi
Language C++ 20 (gcc 12.2)
Score 625
Code Size 5552 Byte
Status AC
Exec Time 697 ms
Memory 92428 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 625 / 625
Status
AC × 3
AC × 31
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 02_prime_00.txt, 02_prime_01.txt, 02_prime_02.txt, 02_prime_03.txt, 02_prime_04.txt, 02_prime_05.txt, 02_prime_06.txt, 02_prime_07.txt, 02_prime_08.txt, 02_prime_09.txt, 03_corner_00.txt, 03_corner_01.txt, 03_corner_02.txt, 03_corner_03.txt, 03_corner_04.txt, 03_corner_05.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3692 KiB
00_sample_01.txt AC 1 ms 3792 KiB
00_sample_02.txt AC 1 ms 3640 KiB
01_random_00.txt AC 6 ms 3760 KiB
01_random_01.txt AC 29 ms 6732 KiB
01_random_02.txt AC 691 ms 92300 KiB
01_random_03.txt AC 697 ms 92424 KiB
01_random_04.txt AC 45 ms 9968 KiB
01_random_05.txt AC 289 ms 44488 KiB
01_random_06.txt AC 693 ms 92320 KiB
01_random_07.txt AC 694 ms 92272 KiB
01_random_08.txt AC 8 ms 3964 KiB
01_random_09.txt AC 9 ms 3800 KiB
01_random_10.txt AC 692 ms 92332 KiB
01_random_11.txt AC 694 ms 92292 KiB
02_prime_00.txt AC 679 ms 88444 KiB
02_prime_01.txt AC 682 ms 88928 KiB
02_prime_02.txt AC 686 ms 89396 KiB
02_prime_03.txt AC 688 ms 90400 KiB
02_prime_04.txt AC 690 ms 91304 KiB
02_prime_05.txt AC 688 ms 91988 KiB
02_prime_06.txt AC 688 ms 92260 KiB
02_prime_07.txt AC 691 ms 92312 KiB
02_prime_08.txt AC 688 ms 92428 KiB
02_prime_09.txt AC 689 ms 92300 KiB
03_corner_00.txt AC 680 ms 88628 KiB
03_corner_01.txt AC 671 ms 88428 KiB
03_corner_02.txt AC 671 ms 88528 KiB
03_corner_03.txt AC 672 ms 88428 KiB
03_corner_04.txt AC 675 ms 88404 KiB
03_corner_05.txt AC 675 ms 88616 KiB