A:List
使用list来做这题, 自己写合并结果MLE,用了list自带的merge合并就可以过。。。至今未明。。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <set>
#include <list>
using namespace std;
char cmd[20];
int id,id1,id2,num;
list<int> *s[10000+10];
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
int n ;
cin>>n;
for (int i = 0; i < n; ++i)
{
scanf("%s",cmd);
switch(cmd[0])
{
case 'n':
scanf("%d",&id);
s[id] = new list<int>;
s[id]->clear();
break;
case 'a':
scanf("%d %d",&id,&num);
s[id]->push_back(num);
break;
case 'm':
scanf("%d %d", &id1,&id2);
//if (s[id1]->size() < s[id2]->size()) swap(s[id1],s[id2]);
//for (list<int>::iterator i = s[id2]->begin(); i != s[id2]->end(); i++)
// s[id1]->push_back(*i);
s[id1]->merge(*s[id2]);
//s[id2]->clear();
break;
case 'u':
scanf("%d",&id);
s[id]->sort();
s[id]->unique();
break;
case 'o':
scanf("%d",&id);
s[id]->sort();
for (list<int>::iterator i = s[id]->begin(); i != s[id]->end(); i++)
printf("%d ",*i);
printf("\n");
break;
default:
break;
}
}
return 0;
}
B:RPN Calculator
stack 操作后缀表达式
因为没考虑里面有负数的情况 RE的次数略多
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <set>
#include <stack>
#include <cmath>
#include <sstream>
using namespace std;
multiset<double> memory;
stack<double> cal;
int n;
double d;
char cmd[200];
void calc(char ope)
{
double x = cal.top(); cal.pop();
double y = cal.top(); cal.pop();
double z=0;
switch (ope)
{
case '+':
z = x+y;break;
case '-':
z = y-x;bre