Educational Codeforces Round 78 (Rated for Div. 2)

A. Shuffle Hashing


main(void)
{
	int t;
	cin>>t;
	_0for(m,t)
	{
		char a[200],b[200];
		unordered_map<char,int> mp;
		mp.clear();
		scanf("%s%s",a,b);
		int la=strlen(a);
		int lb=strlen(b);
	
		if(lb<la)
		{
			printf("NO\n");continue;
		}
		for(int i=0;i<la;i++)
		{
			mp[a[i]]++;
		}
		int flag;
		for(int i=0;i<=lb-la;i++)
		{
			flag=1;
			unordered_map<char,int> mp1;
			mp1.clear();
			for(int j=i;j<i+la;j++)
			{
				mp1[b[j]]++;
			}
			for(int j=0;j<la;j++)
			{
				if(mp[a[j]]!=mp1[a[j]])
				{
					flag=0;
					break;
				}
			}
			if(flag)break;
		}
		if(flag==1)printf("YES\n");
		else printf("NO\n");
	} 
}

B-A and B


main(void)
{
	int t;
	double a,b;
	cin>>t;
	_0for(m,t)
	{
		cin>>a>>b;
		int l=0;
		int r=abs(a-b);
		int ans=9999999;
		int cha=r;
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(mid*(mid+1)/2<cha)
			{
				l=mid+1;
			}
			else  
			{
				ans=min(mid,ans);
				r=mid-1; 
			}
		}
		int anss=ans;
		for(int i=ans;;i++)
		{
			if((i*(i+1)/2-cha)%2==0)
			{
				anss=i;
				break;
			}
		}
		printf("%lld\n",anss); 
	}
}

C-Berry Jam

问题转化,1和2是抵消的关系,可以把写成-1,然后求前缀和


int s[100005],s2[100005],b[100005],t;
main(void)
{
	cin>>t;
	int n,p;
	_0for(m,t)
	{
	
		int ans=9999999;
		scanf("%d",&n);
		map<int ,int> mp;
		mp.clear();
		mp[0]=-1;
		_1for(i,n)
		{
			scanf("%d",&p);
			if(p==2)p=-1;
			s[i]=s[i-1]+p;
			mp[s[i]]=i;	
		//	debug(s[i]);
		}
		_1for(i,n)scanf("%d",&b[i]);
		for(int i=n;i>=1;i--)
		{
			if(b[i]==2)b[i]=-1;
			s2[i]=s2[i+1]+b[i];
		//	debug(s2[i]);
		}
		_1for(i,n+1)
		{
			if(mp[-s2[i]])
			{
				if(mp[-s2[i]]==-1)mp[-s2[i]]=0;
				ans=min(ans,2*n-((n-i+1)+mp[-s2[i]]));
			}
			s2[i]=0;
		}
		printf("%d\n",ans);
	} 
}

你可能感兴趣的:(codeforces)