Codeforces Round #306 (Div. 2) D.E. 解题报告

D题:Regular Bridge 乱搞。构造 这题乱搞一下就行了。构造一个有桥而且每个点的度数都为k的无向图。方法很多,也不好叙述。。 代码如下:

const int mod=1e9+7;using namespace std ;int main(){int k, i, j;while(scanf(“%d”,&k)!=EOF){if(k==1){puts(“YES\n2 1\n1 2”);continue ;}if(!(k&1)) {puts(“NO”);continue ;}puts(“YES”);+4,(k+2)*k);printf(“1 2\n1 %d\n”,k+2);for(i=1;i<=(k-3)/2;i++){printf(“1 %d\n1 %d\n”,i+2,k+2-i);}for(i=2;i<=k+2;i++){for(j=i+1;j<=k+2;j++){if(i==2&&j==k+2) continue ;if(i<=(k-3)/2+2&&i>=3&&i+j==k+4) continue ;printf(“%d %d\n”,i,j);}}\n”,k+3,k+4,k+3,2*k+4);for(i=1;i<=(k-3)/2;i++){\n”,k+3,k+4+i,k+3,2*k+4-i);}for(i=k+4;i<=2*k+4;i++){for(j=i+1;j<=2*k+4;j++){if(i==k+4&&j==2*k+4) continue ;if(i>=k+5&&i<=k+4+(k-3)/2&&j+i==3*k+8) continue ;printf(“%d %d\n”,i,j);}}printf(“1 %d\n”,k+3);}return 0 ;}

E题:Brackets in Implications 乱搞。构造。 首先可以注意到只有1->0的结果为0.所以必须要构造出一个1->0来,所以最后一个必须为0,否则无论如何也构造不出最后的0.然后只要在最后一位的0前面构造出一个1就可以了,因为不管前面的结果是什么,只要加上这个1,,结果肯定为1,就可以跟最后一位的0构造出0来了。 然后再看第n-1位,第n-1位如果是1,那么就直接按原样输出就可以了。 这时候第n-1位为0.然后可以注意到第n-1位的前面只要有1个0就可以了。因为0加上任意一个数都是1,所以可以变成这种形式(0->(1->(1->(1……0))…)->0。假如前面没有0的话,那么就是全是1,那么无论怎么构造也都是变成1->0->0。所以前面必须有个0,而只要有一个0,构造方法就出来了。 代码如下:

mod=1e9+7;;int a[1100000];int main(){int n, i, pos, flag;while(scanf(“%d”,&n)!=EOF){for(i=1;i<=n;i++){scanf(“%d”,&a[i]);}if(a[n]){puts(“NO”);continue ;}if(n==1){puts(“YES\n0\n”);continue ;}if(a[n-1]){puts(“YES\n”);for(i=1;i<=n;i++){printf(“%d”,a[i]);if(i!=n) printf(“->”);}continue ;}if(n==2){puts(“NO”);continue ;}flag=0;for(i=n-2;i>=1;i–){if(!a[i]){flag=1;pos=i;break;}}if(!flag) {puts(“NO”);continue ;}puts(“YES”);for(i=1;i<pos;i++){printf(“%d->”,a[i]);}for(i=pos;i<=n-2;i++){printf(“(%d->”,a[i]);}printf(“%d”,a[n-1]);for(i=pos;i<=n-2;i++){printf(“)”);}printf(“->%d\n”,a[n]);}return 0 ;}

人生就是一次充满未知的旅行,在乎的是沿途的风景,

Codeforces Round #306 (Div. 2) D.E. 解题报告

相关文章:

你感兴趣的文章:

标签云: