自我感觉玛力不足。。思维也挺拉的,列出一些事项需要注意。
快CCCC和蓝桥杯了
CCCC会有格式错误这种东西,就是行末多输出空格算错。
蓝桥杯不是很清楚,但是一定要规范输入输出,行末不要多输出空格。
1.一般循环模拟的题。原则就是不能留到下一次循环来检测,自己本次循环完就检查边界问题。(因为如果下次检测。while头部就会有一堆条件判断,很烦的)
2.结构体多属性比较
bool cmp(rec a,rec b){
if (a.cnt != b.cnt) return a.cnt > b.cnt;
return a.ss < b.ss;
}
3.局部变量字符串(string)如果申请了,没有赋值空,会有一些乱码在里面。(其实和整型局部变量一样的道理)
4.输入输出加速
std::ios::sync_with_stdio(false);
std::cin.tie(0);
5.CCCC喜欢整一些什么按照字典序排序的东西:字符串字典序不多说了,结构体排序也不用多说了,但是如果给你一些整数数组,按照数组内每一个元素的字典序来排序,是比较蛋疼的。
(比如数组 a[]={0 4 9 1} b[]={0 4 8 1} c={1 1 1})
思路就是 数组按照vector来存储,然后再额外开一个vector来存放每一个vector的头部指针。
然后定义一个cmp函数,来进行比较。
下面是cmp的函数(按照字典序升序来排列的)(写的很棒。之前没有见过玩的这么骚的....)
bool cmp(vector<int>*a,vector<int>*b){
int lena=a->size();
int lenb=b->size();
for(int i=0,j=0;i<lena && j<lenb;i++,j++){
if(a[i]<b[j])return true;
if(a[i]>b[j])return false;
}
if(lena<lenb)return true;
else return false;
}
rep(i,0,tmp){
dfd(ans[maxlen][i],i);
//vector<int>dd[10007];
anss.push_back(&dd[i]);//取dd[i]的头部地址扔进去
}
sort(anss.begin(),anss.end(),cmp);//自定义排序
//输出
for(vector<int>::iterator it=anss[0]->begin();;){
cout<<*it;
it++;
if(it!=anss[0]->end())cout<<" ";
else break;
}
6.关于dfs自己犯的一些nt错误
1.忘记恢复环境 2.那个题dfs(i,j)的时候表示第i行第j列。参数是dfs(int x,int y),那么x应该注意小于等于行数,y小于等于列数。我写反了,调了半天。