QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#234664#3169. Editing ExplosionPhantomThreshold#AC ✓84ms7452kbC++201.7kb2023-11-01 20:36:582023-11-01 20:36:58

Judging History

你现在查看的是最新测评结果

  • [2023-11-01 20:36:58]
  • 评测
  • 测评结果:AC
  • 用时:84ms
  • 内存:7452kb
  • [2023-11-01 20:36:58]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
//#define int long long
using namespace std;

const int mod = 998244353;
const int maxn = 12;
const int mask = 60005;
inline void add(int &a,const int &b){ a+=b; if(a>=mod)a-=mod; }

int n,D;
int a[maxn],pw[12];
int f[22][mask];

void dpnh(int h[],int c,int nh[])
{
	nh[0]=h[0]+1;
	for(int i=1;i<=n;i++)
	{
		nh[i]= min( min( nh[i-1]+1,h[i]+1 ),h[i-1]+(a[i]!=c) );
	}
}
void geth(int L,int s,int h[])
{
	h[0]=L;
	for(int i=1;i<=n;i++)
	{
		int c= s/pw[i-1]%3;
		if(c==1) c=-1;
		else if(c==2) c=1;
		h[i]=h[i-1]+c;
	}
}
int getcode(int h[])
{
	int s=0;
	for(int i=1;i<=n;i++)
	{
		int c=h[i]-h[i-1];
		if(c==-1) s+= pw[i-1];
		else if(c==1) s+=pw[i-1]*2;
	}
	return s;
}
int h[maxn],nh[maxn];

//vector< pair<int,int> >cand;
//int use[50];

signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	pw[0]=1; for(int i=1;i<maxn;i++) pw[i]=pw[i-1]*3;
	
	string str; cin>>str;
	n=str.size(); str=' '+str;
	for(int i=1;i<=n;i++) a[i]=str[i]-'A'+1;
	cin>>D;
	
	/*
	0 : 0
	1 : -1
	2 : 1
	*/
	
	/*
	for(int i=1;i<=n;i++) if(!use[a[i]])
	{
		cand.emplace_back(a[i],1);
		use[a[i]]=1;
	}
	{
		int num=0,las=0;
		for(int i=1;i<=26;i++) if(!use[i])
		{
			num++; las=i;
		}
		cand.emplace_back(
	}*/
	
	int S=0;
	for(int i=1;i<=n;i++) S+=2*pw[i-1];
	f[0][S]=1;
	
	int ans=0;
	int mxS=pw[n];
	for(int L=0;L<=n+D;L++)
	{
		for(int s=0;s<mxS;s++) if(f[L][s])
		{
			geth(L,s,h);
			if(h[n]==D) add(ans,f[L][s]);
			
			if(L<n+D)
			{
				for(int c=1;c<=26;c++)
				{
					dpnh(h,c,nh);
					int ns=getcode(nh);
					add(f[L+1][ns],f[L][s]);
				}
			}
		}
	}
	cout<<ans<<endl;
	
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3412kb

input:

ICPC 1

output:

230

result:

ok single line: '230'

Test #2:

score: 0
Accepted
time: 57ms
memory: 7356kb

input:

PROGRAMMER 10

output:

110123966

result:

ok single line: '110123966'

Test #3:

score: 0
Accepted
time: 84ms
memory: 7452kb

input:

ABCDEFGHIJ 10

output:

258519532

result:

ok single line: '258519532'

Test #4:

score: 0
Accepted
time: 6ms
memory: 6148kb

input:

AAAAABBBBB 10

output:

877770338

result:

ok single line: '877770338'

Test #5:

score: 0
Accepted
time: 3ms
memory: 3716kb

input:

NOWISTHE 0

output:

1

result:

ok single line: '1'

Test #6:

score: 0
Accepted
time: 4ms
memory: 3652kb

input:

NOWISTHE 1

output:

434

result:

ok single line: '434'

Test #7:

score: 0
Accepted
time: 0ms
memory: 4704kb

input:

ABABABABAB 10

output:

555168781

result:

ok single line: '555168781'

Test #8:

score: 0
Accepted
time: 39ms
memory: 5916kb

input:

ABCDDEFGHI 3

output:

21580956

result:

ok single line: '21580956'

Test #9:

score: 0
Accepted
time: 71ms
memory: 6988kb

input:

ABCDDEFGHI 8

output:

49338700

result:

ok single line: '49338700'

Test #10:

score: 0
Accepted
time: 1ms
memory: 3448kb

input:

A 10

output:

864056661

result:

ok single line: '864056661'