QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#340776#4394. Keyboard Warriorcrsfaa#AC ✓40ms10284kbC++141.9kb2024-02-29 11:54:552024-02-29 11:54:56

Judging History

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

  • [2024-02-29 11:54:56]
  • 评测
  • 测评结果:AC
  • 用时:40ms
  • 内存:10284kb
  • [2024-02-29 11:54:55]
  • 提交

answer

#include<bits/stdc++.h>
#define Yukinoshita namespace
#define Yukino std
using Yukinoshita Yukino;
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') w=ch=='-'?-1:1,ch=getchar();
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
const int mxn=2e5+5;
using ull=unsigned long long;
const ull up=23333333333333;
char s[mxn];
ull mul[mxn],pre[mxn];
int c0[mxn],l0[mxn],c[mxn],l[mxn];
ull get(int c,int l)
{
	return c*up+l;
}
int main()
{
	int T=read(),i;
	for(i=mul[0]=1;i<=2e5;i++)
		mul[i]=mul[i-1]*up;		
	while(T--)
	{
		int n=read(),m=read(),i,pree,cnt,pc=0;
		bool fl=0;
		scanf("%s",s+1);
		pree=s[1],cnt=1;
		for(i=2;i<=n;i++)
		{
			if(s[i]==pree) cnt++;
			else 
			{
				c0[++pc]=pree,l0[pc]=cnt;
				pree=s[i],cnt=1;
			}	
		}
		c0[++pc]=pree,l0[pc]=cnt;
		ull tt=0;
		for(i=2;i<pc;i++)
			tt+=mul[i-1]*get(c0[i],l0[i]);
//		for(i=1;i<=pc;i++)
//			cout<<char(c0[i])<<' '<<l0[i]<<endl;
		cnt=0;
		while(m--)
		{
			char ch[5];
			scanf("%s",ch);
			int x=read();
			if(fl) continue;
			if(!x) continue;
			if(*ch=='-')
			{ 
				for(;x&&cnt;cnt--)
				{
					int mn=min(l[cnt],x);
					l[cnt]-=mn,x-=mn;
					pre[cnt]=pre[cnt-1]+get(c[cnt],l[cnt])*mul[cnt];
					if(l[cnt]) break;
				}
				continue;
			}
			if(c[cnt]==*ch)
				l[cnt]+=x;
			else
				l[++cnt]=x,c[cnt]=*ch;
			pre[cnt]=pre[cnt-1]+get(c[cnt],l[cnt])*mul[cnt];
			if(pc==1)
			{
				if(c[cnt]==c0[1]&&l[cnt]>=l0[1])
					fl=1,puts("yes");
				continue;
			}
//			for(i=1;i<=cnt;i++)
//				cout<<char(c[i])<<','<<l[i]<<endl;
			if(cnt>=pc&&c[cnt]==c0[pc]&&l[cnt]>=l0[pc]&&c[cnt-pc+1]==c0[1]&&l[cnt-pc+1]>=l0[1]&&tt*mul[cnt-pc+1]==pre[cnt-1]-pre[cnt-pc+1])
				fl=1,puts("yes");
		}
		if(!fl) puts("no");
	}
}
/*
1
13 1000
aaaaaaaaaabbb
a 6
a 3
- 100
a 6
a 2
- 3
a 4
a 1
b 1
b 1
- 2
b 2
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 40ms
memory: 10284kb

input:

9
6 6
iloveu
i 1
l 1
o 1
v 1
e 1
u 0
6 10
imfive
u 10
- 20
i 1
m 1
f 1
i 1
v 5
- 4
e 2
- 2
4 4
abab
a 2
b 2
- 3
b 1
2 10
dz
a 1000000000
b 1000000000
- 1000000000
d 1000000000
- 1000000000
d 1000000000
z 1000000000
c 1000000000
e 1000000000
- 111111111
5 7
abcab
a 1
b 1
a 1
b 1
c 1
a 1
b 1
200000 20...

output:

no
yes
no
yes
yes
yes
yes
no
yes

result:

ok 9 lines