2011-05-29 22:37:34Morris
d923. 規律
內容 :
輸入說明
:
每筆測資共輸入一行
此行包含兩正整數I J(1<=I、J<=2^30)
輸出說明
:
請輸出第I(直)行第J(橫)列之數字
範例輸入 :
2 3
範例輸出 :
12
提示
:
出處
:
/**********************************************************************************/
/* Problem: d923 "規律" from */
/* Language: C */
/* Result: AC (3ms, 270KB) on ZeroJudge */
/* Author: morris1028 at 2011-05-29 22:22:01 */
/**********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
main() {
int i, j;
while(scanf("%d %d", &i, &j) == 2) {
long long t, Ans = 0;
while(1) {
t = 2;
while(t < i || t < j) {
t *= 2;
}
if(i == 1 && j == 1) {Ans++;break;}
if(t / 2 >= i && t / 2 < j)
Ans += t*t / 2, j -= t / 2;
else if(t / 2 < i && t / 2 < j)
Ans += t*t / 4, i -= t / 2, j -= t / 2;
else
Ans += t*t / 4 * 3, i -= t / 2;
}
printf("%lld\n", Ans);
}
return 0;
}
上一篇:d925. 平均高度
下一篇:d624. 燈泡問題
規律似乎是這樣:
左上→右下→右上→右下 為一區間
左上區間→右下區間→右上區間→右下區間 為一大區間
以此列推
但用此規律有辦法算嗎?
一個正方形方塊彼此之間的差, 都是 2 的次方數 !
我的做法便是這個樣子 2012-03-01 08:02:15