小技巧
来源:互联网 发布:网络高级工程师认证 编辑:程序博客网 时间:2024/06/05 22:33
输入数据特别多时,读入优化,提高效率
inline int get() { int a=0; char s=getchar(); while(s<'0'||s>'9') s=getchar(); while(s>='0'&&s<='9') a=(a<<3)+(a<<1)+(s^'0'),s=getchar(); return a; }
简单的队列实现(借鉴洛谷):
const int MAXN=100000;//也可写成MAXN=1<<20
struct queue{int l,r,q[MAXN];queue() : l(1),r(0) {}inline void push(int x){q[++r]=x;//可以优化为q[++r & MAXN-1]=x;}inline void pop(){l++;}inline int front(){return q[1];//可以优化为retrun q[1 & MAXN-1];}inline bool size(){return l<=r;}};
手写栈(借鉴洛谷):
int top=0,st[100010];inline int top(){return st[top];}inline void pop(){top--;}inline void push(int x){st[++top]=x;//元素入栈 }
自定义排序对于求集体中的最大值以及有多个最大值时依靠字典序求最大值的题目应用较为方便:
以洛谷P1051谁拿了最多奖学金为例
bool mycmp(school x,school y){if(x.ans==y.ans) return x.id<y.id;//字典序排序else return x.ans>y.ans;}sort(a+1,a+1+n,mycmp);
地图类题目用到方向数组时,需要判断:
if(xx>0 &&x<m &&yy>0 &&y<n)//m行n列,xx和yy是坐标
离散化基础(可减少排序次数):
a[0].val=-1; int t=0; for(int i=1;i<=n;i++) { if(a[i].val==a[i-1].val) rank[a[i].id]=t;//val存数值,id是该数在原数据的位置 ,特判 else rank[a[i].id]=++t; }
最大生成树:
void prim(){memset(dis,10,sizeof(dis));for(int i=1;i<=n;i++) dis[i]=b[1][i];memset(vis,0,sizeof(vis));vis[1]=1;dis[1]=0;for(int i=2;i<=n;i++){int maxx=-100,c=0;for(int j=1;j<=n;j++) if((!vis[j]) &&(dis[j]>maxx)) { maxx=dis[j]; c=j; } vis[c]=1; ans+=maxx; for(int j=1;j<=n;j++) if((b[c][j]>dis[j]) &&(!vis[j])) dis[j]=b[c][j];}}
dfs判环:
void dfs(int k){for(int i=linkk[k];i;i=e[i].next){int t=e[i].y;if(t==root) end();//遍历到相同点,说明有环if(!vis[t]){++sum[root]; vis[t]=1;dfs(t);}}}void work(){for(int i=1;i<=n;i++){ memset(vis,0,sizeof(vis));vis[i]=1;root=i;//记录当前点 dfs(i);}}
阅读全文
0 0
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧:
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 小技巧
- 判断某个对象是否是空对象
- [中等] UVa OJ 12186 Another Crisis
- 简谈JAVA基础--单链表
- Java IO包装流如何关闭?(关闭顺序)
- 笔记本不显示“选择关闭盖子的功能”
- 小技巧
- Eclipse中Web项目出现感叹或红叉该怎么解决?
- java 运算符
- Flum+hdfs
- CasperJS API 第三篇
- ThreadLocal使用
- docker问题汇总
- 使用Mockito进行单元测试【1】——mock and verify
- 数十种TensorFlow实现案例汇集:代码+笔记