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();
}
}

浙公网安备 33010602011771号