技巧
时空限制
1<<10 (2的10次方) :1024
1<<20 (2的20次方) :1048576 (1e6)
1<<30 (2的30次方) :1073741824
前缀和数组下标都从1开始,可用string字符串下标总从0开始,两种解决方法
char s[MAX];
scanf("%s",s+1);
string s;
cin>>s;
s="#"+s;
用累计字母出现次数的方式 确定一个字符串的字母组成
int cnt[26];
cnt[s[i]-‘a’]++;
甚至可以 vector cnt1(26,0);
直接开两个vector比较哈希表是否相等 (vector支持直接比较是否相等)
n除以m向上取整
old
别忘了ceil血的教训
(int)ceil(n*1.0/5);
(n+m-1)/m
使用erase之后下标回溯
erase之后指针错乱,代码解释
每删除一个元素就i--
让指针回溯一个位置,因为此时被删除元素的后一个元素 对应的下标就是此时的i
vector<int> v;
v.clear();
v.push_back(0);
v.push_back(1);v.push_back(2);
v.push_back(3);v.push_back(4);
v.push_back(5);v.push_back(6);
for(int i=0;i<v.size();i++){
cout<<v[i]<" ";
if(v[i]&1){
v.erase(v.begin()+i);
i--;
}