問題はこちら
No.522 Make Test Cases(テストケースを作る) - yukicoder
a,b,cの三重ループでやると間に合わないという罠がある
a,bを決めればcが自動的に決まるので二重ループで書ける
似たような話は前にNo.250 atetubouのzetubou - yukicoderの問題文で見た
a,b,c,n; main(){ scanf("%d",&n); for(a=1;a<n;a++)for(b=a;b<n;b++){ c=n-a-b; if(c>=b)printf("%d %d %d\n",a,b,c); } }
2つ目のループの継続条件をn-a-b>=bにすると、c>=bかどうかの分岐が不要になる
ということでループ圧縮などをささっと
i,j;main(n){for(scanf("%d",&n);i<n;i++)for(j=i;n-i-j>=j;j++)printf("%d %d %d\n",i,j,n-i-j);} i,j;main(n){for(scanf("%d",&n);j=++i%n;)for(;n-i-j>=j;)printf("%d %d %d\n",i,j++,n-i-j);} n,j;main(i){for(j=scanf("%d",&n);n-i-j>=j?printf("%d %d %d\n",i,j++,n-i-j):(j=++i%n););} n,j;main(i){for(j=scanf("%d",&n);n-i-j<j?j=++i%n:printf("%d %d %d\n",i,j++,n-i-j););}
85B