Educational Codeforces Round 129 (Rated for Div. 2) 补题

A~C

A

水题。对两组数据排序之后,比较最大值。
最大值较大的那个人总会赢,当最大值相同时,谁先出牌谁赢

void solve()
{
	int n, m; 
	cin >>n;
	for(int i = 1; i <= n ;i ++) cin >> a[i];
	cin >> m;
	for(int i = 1; i <= m; i++) cin >> b[i];
	sort(a + 1, a + 1 + n);
	sort(b + 1, b + 1 + m);
	if(a[n] > b[m])
	{
		cout << "Alice" << endl;
		cout << "Alice" << endl;
	}
	else if(a[n] < b[m])
	{
		cout << "Bob" << endl;
		cout << "Bob" << endl;
	}
	else if(a[n] == b[m])
	{
		cout << "Alice" << endl;
		cout << "Bob" << endl;
	}
}

B

每次只需要找到牌顶的下标在哪就行了,一旦下标大于等于n就mod n就行了

void solve()
{
	int n, m; 
	cin >> n;
	for(int i = 0; i < n; i++) cin >> a[i];
	cin >> m;
	int idx = 0;
	for(int i = 0; i < m; i++) 
	{
		int x;
		cin >> x;
		idx = (idx + x) % n;
	}
	cout << a[idx] <<endl;
}

C 补题 C题解法原作者

其实就是排序的同时记录改动的下标就行了。(比赛的时候一直在想怎么去排序,没想到就用最原始的方法就行了)
假如将a排好序后b依然无序,如果无序的地方a是相等的,交换,否则就输出-1;

void solve()
{
	int n, m; 
	cin >> n;
	queue<PII> q;
	for(int i = 0; i < n; i ++)
	{
		cin >> a[i];
	}
	for(int i = 0; i < n;i ++) cin >> b[i];
	for(int i = 0; i < n - 1; i++)
	{
		for(int j = 0; j < n - 1 - i; j++)
		{
			if(a[j] > a[j + 1]) 
			{
				swap(a[j], a[j + 1]);
				swap(b[j], b[j + 1]);
				q.push({j + 1, j + 1 +1});
			}
		}
	}
	
	for(int i = 0; i < n - 1; i++)
	{
		for(int j = 0; j < n - 1 - i; j++)
		{
			if(b[j] > b[j + 1])
			{
				if(a[j] == a[j + 1])
				{
					swap(b[j], b[j + 1]);
					q.push({j +1, j + 1 +1});
				}
				else {
					puts("-1");
					return ;
				}
			}
		}
	}
	
	cout << q.size() << endl;
	while(q.size())
	{
		cout << q.front().first << ' ' << q.front().second << endl;
		q.pop();
	}
}
posted @ 2022-05-26 23:37  nobodyL  阅读(19)  评论(0)    收藏  举报