openjudge 9주차 A:List 신해 (vector 구현)
통계 질문 제출 총 시간 제한 보기: 4000ms 메모리 제한: 65536kB 설명 다음 명령을 완성합니다: new id - 지정한 번호가 id인 시퀀스 (id<10000) add id num - 번호가 id인 시퀀스에 정수 num merge id1 id2 - 시퀀스 id1과 id2의 수를 합쳐서그리고 id2를 Unique id - 서열 id에서 중복된 요소를 제거하고 out id - 작은 출력에서 큰 출력으로 id로 된 서열의 요소를 공백으로 구분합니다
첫 번째 행에 n 을 입력하여 명령이 몇 개 있는지 나타냅니다.앞으로 n줄마다 명령이 하나씩 있습니다.출력은 제목에 따라 출력해야 한다.샘플 입력 16 new 1 new 2 add 1 1 add 1 2 add 1 3 add 2 1 add 2 2 2 add 2 3 add 2 4 out 1 out 2 merge 1 2 out 1 out 1 out 2 unique 1 out 1 샘플 출력 1 2 3 1 2 3 1 2 1 2 1 2 3 2 3 4 1 2 3 4 1 2 3 4 4 1 2 3 4 1 2 3 4 4 4 4 4 4
id 데이터의 범위가 비교적 작다는 것을 알아차리고 10000vector의 수조를 직접 채우면 된다. 중점은vector의 무거운 부분을 제거하는 데 있다. 그 중에서 합병 조작은 id1=id2의 상황을 주의해야 한다. 말이 많지 않으면 코드를 올린다.
#include
#include
#include
using namespace std;
vector<int>::iterator it;
vector<int >num[10005];
int main() {
string s;
int n,id,val;
cin >> n;
while (n--) {
cin >> s;
if (s == "new") {
cin >> id;
continue; }
if (s == "add") {
cin >> id>>val;
num[id].push_back(val);
}
if (s == "out") {
cin >> id;
if (!num[id].empty()) {
sort(num[id].begin(), num[id].end());
it = num[id].begin();
cout << *it;
it++;
for (; it != num[id].end(); it++) {
cout << " " << *it;
}
}
cout << endl;
}
if (s == "unique") {
cin >> id;
sort(num[id].begin(), num[id].end());
num[id].erase(unique(num[id].begin(), num[id].end()),num[id].end());
// unique() , , vector
}
if (s == "merge") {
cin >> id >> val;
if (val != id)// ,wa
{
vector<int>tmp;
tmp.resize(num[id].size() + num[val].size());
merge(num[id].begin(), num[id].end(), num[val].begin(), num[val].end(), tmp.begin());
num[id].swap(tmp);
num[val].clear();
}
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
49일차 - 2022.04.20Baekjoon에서 문제풀이 1) 문제 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제/ 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 첫째 줄부터 N번째 줄까지 차례대로 별...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.