BAPC 2014 Preliminary——ACM-ICPC Asia Training League 暑假第一阶段第一场

A. Choosing Ice Cream

题目大意:有n种冰淇淋和一个k面的骰子,问至少扔几次骰子使得选择每种骰子的概率相等。

先把大神的代码先放这,还没看懂大哭当然也可以用快速幂试试

// Time complexity: O(log(n))
// Memory: O(1)
 
// @EXPECTED_RESULTS@: CORRECT
 
/* Solution method:
 *
 * Insight: n divides k^t iff n divides d^t, where d = gcd(n,k).
 * Hence n divides k^t iff n/d divides d^(t-1).
 * Let n' = n/d, k' = d and t' = t-1. Then n divides k^t iff n' divides k'^t'.
 * We can repeat this process.
 * If at some point we have n' = 1, then t' = 0 is the smallest t';
 *   t is then the number of iterations.
 * If it is not unbounded, we should eventually get t' = 0. Then n' = 1 must hold.
 * Hence, if we never reach n' = 1, it is unbounded.
 * We never reach n' = 1 iff at some point k' = 1 (and n' > 1).
 */
 
#include <algorithm>
#include <cstdio>
#include<iostream>
using namespace std;
 
// Greatest common divisor
int gcd (int a, int b)
{ return b ? gcd(b, a%b) : a;
}
 
int main()
{	int runs, run, n, k, t;
	scanf("%d", &runs);
	for (run = 0; run < runs; run++)
	{
		scanf("%d %d", &n, &k);
		//cout<<"n="<<n<<",k="<<k<<endl;
		for (t = 0; n > 1 && k > 1; t++)
		{
		  //cout<<"***n="<<n<<",k="<<k<<endl;
		  k = gcd(n, k);
		  n /= k;
		}
		if (n > 1)
			printf("unbounded\n");
		else
			printf("%d\n", t);
	}
	return 0;
}

B. Failing Components

C. Floor Painting

D. Lift Problems

E. Pawns

F. Runway Planning 

签到题

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int t,n,ans;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		if(n>180) n-=180;
		ans=(n+5)/10;
		if(ans==0) ans=18;
		printf("%02d\n",ans);
	}
	return 0;
}

G. Spy Network

H. Talent Selection

I. Train Station Tunnel

J. Word Search

猜你喜欢

转载自blog.csdn.net/qq_37275680/article/details/81356526