【NOIP2017提高A組模擬9.12】Arrays and Palindrome
阿新 • • 發佈:2020-11-14
【NOIP2017提高A組模擬9.12】Arrays and Palindrome[SPJ]
題目
Description
Input
Output
Sample Input
1
6
Sample Output
6
2
1 5
Data Constraint
題解
題意
em……語言組織能力不行,看題吧
題解
結論題
可以證得\(A\)裡最多隻有2個奇數,否則無解
分情況討論
0個奇數:\(a\)就是\(A\),\(b\)是\(A_1+1,A_2...A_{n-1},A_n-1\)
1個奇數:
\(a\):奇數放後面,其餘不變
\(b\): 同上,第一個+1,最後一個-1
2個奇數:
\(a\)
\(b\):同上,第一個+1,最後一個-1,如果最後一個是1的話就不輸出
特判\(n=1\)
Code
#include<cstdio> using namespace std; int n,t,a[100001],c[100001]; int main() { freopen("b.in","r",stdin); freopen("b.out","w",stdout); scanf("%d",&n); for (int i=1;i<=n;++i) scanf("%d",&a[i]); if (n==1) printf("%d\n",a[1]),printf("2\n"),printf("%d %d\n",1,a[1]-1); else { for (int i=1;i<=n;++i) if (a[i]&1) c[++t]=a[i]; for (int i=1;i<=n;++i) if (!(a[i]&1)) c[++t]=a[i]; for (int i=2;i<=n;++i) printf("%d ",c[i]); printf("%d\n",c[1]); if (c[1]==1) printf("%d\n",n-1); else printf("%d\n",n); printf("%d ",c[2]+1); for (int i=3;i<n;++i) printf("%d ",c[i]); if (c[1]==1) printf("%d\n",c[n]-1); else printf("%d %d\n",c[n],c[1]-1); } fclose(stdin); fclose(stdout); return 0; }