您的位置:首页 > 其它

2017网易有道校园招聘笔试题

2017-03-25 15:13 357 查看
 



 

分析题目可以发现原始序列和之后的序列有一个对应关系。 比如队列的第二个数是第一个被输出的,所以输出是 1 2 ... n的话,对应的第二个数就是1 依次内推。我们可以从之后的序列出发进行同样的操作然后做个对应关系的映射还原回原始的序列

 

1 #include "iostream"
2 #include "queue"
3 #define N 100005
4
5 using namespace std;
6
7 int n, a
, b
;
8
9 int main() {
10     int t;
11     cin >> t;
12
13     while (t--) {
14         cin >> n;
15         queue<int> q;
16         for (int i = 1; i <= n; i++)
17             q.push(i);
18
19         int cnt = 0;
20
21         while (!q.empty()) {
22             int x = q.front();
23             q.pop();
24             q.push(x);
25             x = q.front();
26             a[++cnt] = x;
27             q.pop();
28         }
29
30         for (int i = 1; i <= n; i++)
31             b[a[i]] = i;
32
33         for (int i = 1; i < n; i++)
34             cout << b[i] << " ";
35         cout << b
;
36         cout << endl;
37     }
38     return 0;
39 }


 

 



 

再开一个数组,模拟下,暴力就过了:

1 #include "iostream"
2 #define MAX 201
3 typedef long long LL;
4
5 using namespace std;
6
7 int n, k;
8 LL a[MAX], b[MAX];
9 void solve(LL *a)
10 {
11     for (int i = 1; i <= 2*n; i++)
12     {
13         if (i <= n)
14         {
15                 b[2 * i - 1] = a[i];
16         }
17         else
18                 b[2 * (i - n)] = a[i];
19     }
20     for (int i = 1; i <= 2 * n; i++)
21     {
22         a[i]=b[i];
23     }
24 }
25
26 int main()
27 {
28     int t;
29
30     cin >> t;
31     while (t--)
32     {
33         cin >> n >> k;
34         for (int i = 1; i <= 2 * n; i++)
35             cin >> a[i];
36
37         while (k)
38         {
39             solve(a);
40             k--;
41         }
42
43         for (int i = 1; i < 2 * n; i++)
44         {
45             cout << a[i] << " ";
46         }cout<<a[2*n];
47         cout << endl;
48     }
49 }


 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: