struct Point{
int x,y;
Point(int x=0,int y=0):x(x),y(y) {} //Point a(1,2)
Point() {}
}
struct cmp //定义一个结构体,重构()运算符
{
bool operator ()(const int a,const int b) const
{return a%10>b%10; } //注意这里的符号应该是相反的
};
ostream & operator <<(ostream &out,const Point & p)
{
out<<"("<<....;
return out;
}
Vector
把vector作为返回值时,应尽量改成用引用方式传递参数,以避免不必要的值被复制vector<int>& p
UVA 101
vector v; v.push_back(); v.pop_back()
如果要删掉数组的最后几个,可以用v.resize(h),保存v[0]~v[h-1]
启示:模拟题多指令要提取指令之间的共同性以减少代码量
忘记忽略非法操作
Set
UVA 10815
将非字母统一处理成空格,然后用stringstream切割 string ans;
string 居然可以这样 !sort(ans.begin(),ans.end());
UVA12096
set_union(x.begin(),x.end(),y.begin(),y.end(),inserter(z,z.begin());将集合X和Y的并集放入Z的开头
set_intersection(x.begin(),x.end(),y.begin(),y.end(),inserter(z,z.begin());将集合X和Y的交集放入Z的开头
对集合求交际并集、放入等再入栈
将集合和数字之间通过vector和下标建立对应关系 即从编号到set
同时用map将集合映射到编号,即从set到编号 完成了双射
set是集合的集合,每个集合用int表示,set<int> 编号就是集合本身,集合就是编号,需要用什么形式就改变到什么形式
map<set<int>,int> IDcache;
vector<set<int> > v;
int ID(Set<int> x)
{ if(IDcache[x].count()) return IDcache[x];
v.push_back(x);
return IDcache[x]=v.size()-1;
}
map
UVA 156 单词不能通过重排得到另一个单词
将单词标准化,每一位都转化成小写,然后按照字典序排序
每个单词都对应一个标准化的string,每个string对应着文本中出现的个数