Codeforces Round #653 (Div. 3)

A. Required Remainder

有时总把问题想复杂,题目要求求得0-n最大k,使k%x=y。仔细一想就是k与y同余,然后差值为x的整数倍

main(void)
{
	int t;
	int x,y,n;
	cin>>t;
	_0for(m,t)
	{
		scanf("%lld%lld%lld",&x,&y,&n);
		int k=y+(n-y)/x*x;
		printf("%lld\n",k); 
	}
}

B. Multiply by 2, divide by 6

精度问题导致wa到自闭。
给出一个数,求得他乘2或者除6,到达1的步数。
思路就是这个数k= 6 n ∗ 2 − m 6 ^ n*2^{-m} 6n2m= 3 n ∗ 2 n − m 3^n*2^{n-m} 3n2nm,思路很简单,但是再用log的时候int可能会精度出现问题,最后要加一。

C. Move Brackets

看上去是一个很复杂的括号匹配,其实因为只能移到开头和结尾,从头统计不匹配的对数就好了。


main(void)
{
	int n,tt;

	char t;
	cin>>tt;
	_0for(m,tt)
	{
		int ans=0;
		scanf("%d",&n);
		int r=0;
		int l=0;
		getchar();
		for(int i=1;i<=n;i++)
		{
			scanf("%c",&t);
			if(t==')')r++;
			else l++;
			if(r>l)
			{
				ans=max(ans,r-l);
			}
		}
		cout<<ans<<endl;
	}
}




你可能感兴趣的:(codeforces)