Sicily 7143. Treasure

7143. TreasureConstraints

Time Limit: 1 secs, Memory Limit: 256 MB

Description

One day, MXWai found a treasure map. The map was divided into 2^n * 2^n grids. The top left corner was (0, 0) and the down right corner was (2^n-1, 2^n-1). The grids and their coordinates are displayed below.

(0, 0)

(0, 1)

……

(0, 2^n-1)

……

……

……

……

(2^n-2, 0)

(2^n-2,1)

……

(2^n-2, 2^n-1)

(2^n-1, 0)

(2^n-1,1)

……

(2^n-1, 2^n-1)

Moreover, she found a secret sequence of length n, and a secret article saying that

"Repeat these operations n times then you will find the treasure.

1、divide the map into four 2^(n-1) * 2^(n-1) parts: the top left part labeled 0, the top right part labeled 1, the down left part labeled 2 and the down right part labeled 3

2、select the corresponding part according to the first digit of the sequence

3、erase the first digit of the sequence

4、decrease n by one

finally you will find out where the treasure is"

You know MXWai is just a majia, so you know she is stupid. Now it is your task to find out the location of the treasure.

Input

An integer T (1<=T<=1000000), indicating the number of test cases.

For each test case, there is only one line, containing an integer n (1<=n<=31), and a sequence of length n (the sequence only contains digits ‘0’, ‘1’, ‘2’ and ’3’).

Output

Output two integers, indicating the coordinates of the treasure.

Sample Input31 32 002 01Sample Output1 10 00 1Hint

This problem has huge input data, usescanf()instead ofcinto read data to avoid time limit exceed.

Problem Source

“星海通杯”第四届中山大学ICPC新手赛 by 黄文浩

这道题其实就是无限划分。。

#include <string.h>#include <vector>#include <queue>#include <stdio.h>#include <stack>#include <math.h>using namespace std;int main() {int t, n;scanf("%d", &t);while (t–) {char dir[35] = {0};long long i_min = 0, j_min = 0, i_max, j_max;scanf("%d %s", &n, dir);i_max = (long long)pow(2, n) – 1;j_max = (long long)pow(2, n) – 1;for (int i = 0; i < n; i++) {if (dir[i] == '0') {i_max = i_min + (i_max – i_min) / 2;j_max = j_min + (j_max – j_min) / 2;} else if (dir[i] == '1') {i_max = i_min + (i_max – i_min) / 2;j_min = j_max – (j_max – j_min) / 2;} else if (dir[i] == '2') {i_min = i_max – (i_max – i_min) / 2;j_max = j_min + (j_max – j_min) / 2;} else {i_min = i_max – (i_max – i_min) / 2;j_min = j_max – (j_max – j_min) / 2;}}printf("%lld %lld\n", i_min, j_min);}return 0;}

,你能给的也只有这么多,在这个狭小的圈子里,

Sicily 7143. Treasure

相关文章:

你感兴趣的文章:

标签云: