2015-02-07 02:10:27
题目很有欧洲赛区的风格... 模拟赛过程不太顺利,习惯于国内的 技巧 and 算法 式解题,而忽略了计算机的最大优势:高速计算,也就是“暴力”!
然后数学题居多...
A - Murphy's Law(Ural 1800):
物理题。注意一下单位,l(cm),h(cm),w(转/分钟)
首先考虑:当重心降到 l/2 的位置时答案就可以确定了(思考),算出时间:t = sqrt(2 * h - l) / g,再算出每转90度需要的时间 : t0 = 90 / (w * 6.0)
这样就可以算出重心降到 l/2 时面包转了k个90度,根据求出的k(mod 4),判断:若k<1 || k > 3,那么是“butter”,否则就是“bread”
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <vector> 6 #include <map> 7 #include <set> 8 #include <stack> 9 #include <queue> 10 #include <string> 11 #include <iostream> 12 #include <algorithm> 13 using namespace std; 14 15 #define MEM(a,b) memset(a,b,sizeof(a)) 16 #define REP(i,n) for(int i=0;i<(n);++i) 17 #define REV(i,n) for(int i=(n-1);i>=0;--i) 18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i) 19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i) 20 #define getmid(l,r) ((l) + ((r) - (l)) / 2) 21 #define MP(a,b) make_pair(a,b) 22 23 typedef long long ll; 24 typedef pair<int,int> pii; 25 const int INF = (1 << 30) - 1; 26 27 double l,h,w; 28 29 int main(){ 30 scanf("%lf%lf%lf",&l,&h,&w); 31 if(2 * h < l){ 32 printf("butter\n"); 33 return 0; 34 } 35 l /= 100.0; 36 h /= 100.0; 37 w *= 6.0; 38 double t = sqrt((2 * h - l) / 9.81) / (90.0 / w); 39 t = t - (int)(t / 4) * 4; 40 if(t < 1 || t > 3) printf("butter\n"); 41 else printf("bread\n"); 42 return 0; 43 }