code forces 370C. Mittens
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
A Christmas party in city S. had n children. All children came in mittens. The mittens can be of different colors, but each child had the left and the right mitten of the same color. Let's say that the colors of the mittens are numbered with integers from 1 to m, and the children are numbered from 1 to n. Then the i-th child has both mittens of color ci.
The Party had Santa Claus ('Father Frost' in Russian), his granddaughter Snow Girl, the children danced around the richly decorated Christmas tree. In fact, everything was so bright and diverse that the children wanted to wear mittens of distinct colors. The children decided to swap the mittens so that each of them got one left and one right mitten in the end, and these two mittens were of distinct colors. All mittens are of the same size and fit all the children.
The children started exchanging the mittens haphazardly, but they couldn't reach the situation when each child has a pair of mittens of distinct colors. Vasily Petrov, the dad of one of the children, noted that in the general case the children's idea may turn out impossible. Besides, he is a mathematician and he came up with such scheme of distributing mittens that the number of children that have distinct-colored mittens was maximum. You task is to repeat his discovery. Note that the left and right mittens are different: each child must end up with one left and one right mitten.
Input
The first line contains two integers n and m — the number of the children and the number of possible mitten colors (1 ≤ n ≤ 5000, 1 ≤ m ≤ 100). The second line contains n integers c1, c2, ... cn, where ci is the color of the mittens of the i-th child (1 ≤ ci ≤ m).
Output
In the first line, print the maximum number of children who can end up with a distinct-colored pair of mittens. In the next n lines print the way the mittens can be distributed in this case. On the i-th of these lines print two space-separated integers: the color of the left and the color of the right mitten the i-th child will get. If there are multiple solutions, you can print any of them.
Sample test(s)
input
6 3
1 3 2 2 1 1
output
6
2 1
1 2
2 1
1 3
1 2
3 1
input
4 2
1 2 1 1
output
2
1 2
1 1
2 1
1 1
제목: n명의 어린이, m가지 색깔의 양말이 있습니다. 모든 어린이는 양말을 한 켤레 가지고 있습니다. 가능한 한 많은 어린이들이 서로 다른 색깔의 양말을 신도록 해야 합니다. 어떻게 분배해야 하는지를 구합니다.
사고방식: 서로 다른 색깔의 양말 수를 많고 적음에 따라 순서를 정한 다음에 뒤에서 앞으로 밀어낸다. 매번 밀어낸 부분과 뒤의 교환 위치를 서로 다른 색깔로 바꿀 수 있다. 아래 표지와 경계에 주의하여wa를 여러 번 했다.
코드:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int n, m, color, ans[5005][2], len, sum[105];
struct Have {
int color;
int num;
} h[105];
int cmp(Have a, Have b) {
return a.num > b.num;
}
int main() {
len = 0;
memset(ans, -1, sizeof(ans));
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i ++)
h[i].color = i;
for (int i = 0; i < n; i ++) {
scanf("%d", &color);
h[color].num ++;
}
sum[0] = 0;
sort(h + 1, h + 1 + m, cmp);
for (int i = 1; i <= m; i ++) {
sum[i] = sum[i - 1] + h[i].num;
for (int j = 0; j < h[i].num; j ++) {
ans[len][0] = ans[len][1] = h[i].color;
len ++;
}
}
for (int i = m - 1; i >= 1; i --) {
for (int j = 0; j < sum[i] - sum[i - 1]; j ++) {
int a = sum[i] - 1 - j, b = sum[i] + j;
if (ans[a][1] == -1 || ans[b][1] == -1) break;
swap(ans[a][1], ans[b][1]);
}
}
int anss = 0;
for (int i = 0; i < len; i ++)
if (ans[i][0] != ans[i][1])
anss ++;
printf("%d
", anss);
for (int i = 0; i < len; i ++) {
printf("%d %d
", ans[i][0], ans[i][1]);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.