您的位置:首页 > 其它

URAL1088 Ilya Murometz

2010-05-23 22:33 169 查看
http://acm.timus.ru/problem.aspx?space=1&num=1088

题目描述太过分,黑书上有译题,但是翻译的太过分,于是基本读不懂,直接罪恶的看这个吧:

http://www.nocow.cn/index.php/Translate:URAL/1088

于是就是道水题了,不多说

代码

#include <cstdio>

int D , E , F , Dp, Ep, H, a[32], b[32];

int min(int a, int b) { if(a < b) return a; return b; }

int main()
{
scanf("%d %d %d %d %d %d", &D, &E, &F, &Dp, &Ep, &H);
int i = (1 << F), j, ans = 100000;
int Di = Dp + i - 1;
int Ei = Ep + i - 1;
int ld = 0 , le = 0, t1 = 0, t2 = 0;
while(Di)
{
if(t1 >= D)
a[ld ++] = Di;
t1 ++;
Di >>= 1;
}
while(Ei)
{
if(t2 >= E)
b[le ++] = Ei;
t2 ++;
Ei >>= 1;
}
if(le == 0 && ld == 0) {
puts("YES");
return 0;
} else if(le == 0 && ld != 0) {
ans = F - D;
} else if(le != 0 && ld == 0) {
ans = F - E;
} else {
for(i=0; i < ld; i++) {
for(j=0; j < le; j++) {
if(a[i] == b[j])
ans = min(i + j, ans);
}
}
}
if(ans <= H)
puts("YES");
else
puts("NO");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: