Set 的应用 1(noi.openjudge.cn) 平台的提交
3341:Set
描述
现有一整数集(允许有重复元素),初始为空。我们定义如下操作:
add x 把 x 加入集合
del x 把集合中所有与 x 相等的元素删除
ask x 对集合中元素 x 的情况询问
对每种操作,我们要求进行如下输出。
add 输出操作后集合中 x 的个数
del 输出操作前集合中 x 的个数
ask 先输出 0 或 1 表示 x 是否曾被加入集合(0 表示不曾加入),再输出当前集
合中 x 的个数,中间用空格格开。
输入
第一行是一个整数 n,表示命令数。0<=n<=100000。
后面 n 行命令,如 Description 中所述。
输出
共 n 行,每行按要求输出。
样例输入
7
add 1
add 1
ask 1
ask 2
del 2
del 1
ask 1
样例输出
1
2
1 2
0 0
0
2
1 0
#include<bits/stdc++.h>
using namespace std;
int main()
{
//freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
multiset<int> s;
multiset<int> s1;// 存备份,只存不删除
int n;
cin>>n;
int i;
for(i=1;i<=n;i++)
{
string str;
int x;
cin>>str>>x;
if(str=="add")
{
s.insert(x);
s1.insert(x);// 备份里面 添加这个 元素
cout<<s.count(x)<<endl;
}
else if(str=="del")
{
cout<<s.count(x)<<endl;
s.erase(x);
}
else if(str=="ask")
{
if(s1.count(x)>0)
cout<<1<<" ";
else
cout<<0<<" ";
cout<<s.count(x)<<endl;
}
}
return 0;
}
Set 的应用 2
描述
我们定义一个正整数 a 比正整数 b 优先的含义是:
*a 的质因数数目(不包括自身)比 b 的质因数数目多;
*当两者质因数数目相等时,数值较大者优先级高。
现在给定一个容器,初始元素数目为 0,之后每次往里面添加 10 个元素,每次
添加之后,要求输出优先级最高与最低的元素,并把该两元素从容器中删除。
输入
第一行: num (添加元素次数,num <= 30)
下面 10*num 行,每行一个正整数 n(n < 10000000).
输出
每次输入 10 个整数后,输出容器中优先级最高与最低的元素,两者用空格间隔。
样例输入
1
10 7 66 4 5 30 91 100 8 9
样例输出
66 5
/*
#include<bits/stdc++.h>
using namespace std;
int f(int x)
{
if(x<2)
return 0;
int i;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
// x 中不同质因子的个数
int ff(int x)
{
int cnt=0;
if(f(x)==1)
return 0;
int i;
for(i=2;x!=1;i++) // x 在动态调整,x 不是原来的 x,自己除以自己等 1
的时候结束
{
if(x%i==0&&f(i)==1) // 质因子
{
cnt++; // 只加 1 次
while(x%i==0)
{
x=x/i; // 把能够分解的 i 除以完
}
}
}
return cnt;
}
typedef struct node
{
int x; // 数
int cnt; // 因子数量
bool operator<(const node &nd1)const
{
if(cnt!=nd1.cnt)
return nd1.cnt<cnt; // 后者小于前者,从大到小
else
return nd1.x<x; // 第一规则相同的话,按照数的从大到小
}
}node;
node nd[11];
int main()
{
int t;
cin>>t;
set<node> s;
while(t--)
{
int i;
for(i=1;i<=10;i++)
{
int x;
cin>>x;
nd[i].x=x;
nd[i].cnt=ff(x);
s.insert(nd[i]);
}
cout<<(*(s.begin())).x<<" "<<(*(--s.end())).x<<endl;
s.erase(s.begin());// 删掉第一个位置
s.erase(--s.end());// 删掉最后一个元素
}
return 0;
}