文章

16

粉丝

0

获赞

43

访问

2.2k

头像
怪异的洗牌 题解:
P1366 吉林大学机试题
发布于2026年3月24日 17:08
阅读数 140

#include <bits/stdc++.h>
using namespace std;

void func(vector<int>& s, int x)
{
	
    int n = s.size();
    if (n <= 1) return;

    // 1. Shift: 把索引为 x 的数及其后面的数移到前面
    // rotate(first, middle, last) 会将 [middle, last) 移到 [first, middle) 前面
    rotate(s.begin(), s.begin() + x, s.end());

    // 2. Flip: 反转前 n/2 个元素
    int flip_len = n / 2;
    reverse(s.begin(), s.begin() + flip_len);
}





int main()
{
	int n,k;
	while(cin >> n >> k)
	{
		vector<int> s;
		for(int i = 1;i <= n;++i)
		{
			s.push_back(i);
		}
		for(int i = 0;i < k;++i)
		{
			int x;
			cin >> x;
			func(s,x);
		}
		int len = s.size();
		for(int j = 0;j < len;++j)
		{
			cout << s[j];
			if(j != len-1)
			{
				cout << ' ';
			}
		}
		cout << '\n';
	}

	return 0;

}

本质考查STL使用(

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发