原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html
考虑到博客内容较多,编辑不方便的情况,我决定把做题小记拆开写。
题解中的低级错误请指出,但是由于这里写的都是简要题解,所以具体细节就不要问我了。
咕咕咕
AGC009E
突然发现 AGC001F 怎么没做
AGC001
D 出现奇数的个数大于2时一定无解(构造图,从图的连通性方面考虑)。然后,如果有奇数,把他们放到头尾,然后 b 数组就是 a 数组的基础上,b[1]++,b[m]-- 。注意一些特殊情况要分讨。
Code
#include <bits/stdc++.h> using namespace std; const int M=105; int n,m,a[M],b[M]; bool cmp(int a,int b){ return (a&1)>(b&1); } int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) scanf("%d",&a[i]); if (m==1){ if (a[1]==1) printf("%d \n%d\n%d",a[1],1,a[1]); else printf("%d \n%d\n%d %d",a[1],2,a[1]-1,1); return 0; } int t=0; for (int i=1;i<=m;i++) t+=a[i]&1; if (t>2) return puts("Impossible"),0; sort(a+1,a+m+1,cmp); if (a[2]&1) swap(a[2],a[m]); for (int i=1;i<=m;i++) b[i]=a[i]; int _m=m; b[1]++,b[m]--; if (b[m]==0) _m--; for (int i=1;i<=m;i++) printf("%d ",a[i]); puts(""); printf("%d\n",_m); for (int i=1;i<=_m;i++) printf("%d ",b[i]); return 0; }