压行技巧

压行技巧

1

1
2
3
4
5
for(init;check;update)
{

}
XXX

可以改成

1
2
3
4
for(init; check || (XXX,0) ; update)
{

}

2

逗号的用法

1
2
3
4
5
6
7
if()
{
AAA;
BBB;
CCC;
return DDD;
}

可以改成

1
2
3
4
if()
{
return AAA,BBB,CCC,DDD;
}

3

赋值语句和普通表达式的值

1
2
A=func(B);
printf("%d",A);

可以改为

1
printf("%d", A=func(B));

4

短路语句

1
2
if(AAA)
BBB

可以写成

1
(!AAA)||BBB;

当AAA为假,则短路,不计算BBB

当AAA为真,计算BBB

5

利用for

1
2
3
4
5
6
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%d",a[i][j]);
puts("");
}

可以改为

1
2
3
for(int i=1;i<=n;i++,puts(""))
for(int j=1;j<=n;j++)
printf("%d",a[i][j]);

6

综合运用例如

1
2
3
4
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}

并查集

7