-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDS_Quiz_3_arr.c
69 lines (66 loc) · 1.98 KB
/
DS_Quiz_3_arr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
int magic[1024][1024] = {0};
int main(){
int x;
scanf("%d",&x);
while (x--){
int time = 0;
int ball = 0;
scanf("%d %d",&time,&ball);
int thold = time;
long long int math = 0;
long long int mathnum = 1;
while (thold>0){
math = math + mathnum;
thold--;
mathnum = mathnum*2;
}
for (int i = 0 ; i < 1024 ; i++){
for( int j = 0 ; j < 1024 ; j++ ){
magic[i][j] = ((i*1024)+j < math ? 1 : 0);
if (magic[i][j]>0){
//printf("%d %d \n",i,j);
}
}
}
long long int final = 0;
while (ball--){
long long int num=0;
while (1){
if (magic[num/1024][num%1024]==1){
magic[num/1024][num%1024]=2;
long long int checknum = num*2+1;
//printf("a : %d ;",checknum);
if (checknum > 1048576){
//printf("o");
break;
}
else if (magic[checknum/1024][checknum%1024] == 0){
//printf("o");
break;
}
else {
num = checknum;
}
}
else {
//printf("m");
magic[num/1024][num%1024]=1;
long long int checknum = (num*2)+2;
if (checknum > 1048576){
break;
}
else if (magic[checknum/1024][checknum%1024] == 0){
break;
}
else {
num = checknum;
}
}
}
final = num;
}
printf("%d\n",final+1);
}
}
//不是吧 用陣列幹是最快的