传送门

题目大意

给定一个元素和为$N$的有$M$个数的序列$A$,请你可以$A$元素排列的顺序,并需要构造一个有$K$个($K$可以自己定)数的数列,使得任意一个长度为$N$的字符串,若满足:前$A_1$字符是回文串,接下来$A_2$个字符是回文串,直到$最后A_M$个字符也是一个回文串,且对于$B$同样满足这个性质,则这个字符串一定只能由一种字符构成。

题解

考虑一个回文串实际是在每一对关于中心对称的两个位置之间连一条边,那么原题就变成了连边让所有位置连成一个连通块。

显然我们至少需要$n-1$条边,那么对于每一个$A_i$,它提供的边数是$\lfloor\frac{A_i}{n}\rfloor$,考虑到$\sum(A_i+B_i)=N$,那么$A_i,B_i$最多出现两个奇数,否则无解。

考虑$A_1$和$B_1$左对齐,我们只需要让$B_i=A_i\pm 1$,那么$B_i,A_i$这些位置就会被连城一个连通块。

考虑$A_i=B_i$但$B_i$相互错位了一个位置,画图发现当且仅当$A_i$是偶数时,这$A_i+1$个位置就能连成一个连通块。

由于奇数的情况不超过两个,那么可以直接把奇数放在两边,然后把$A$复制下来,最左边的数$-1$,最右边的数$+1$,把$0$过滤掉输出即可。

注意要特判$n,m=1$之类的情况

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define M 120
using namespace std;
namespace IO{
const int BS=(1<<20)+5; int Top=0;
char Buffer[BS],OT[BS],*OS=OT,*HD,*TL,SS[20]; const char *fin=OT+BS-1;
char Getchar(){if(HD==TL){TL=(HD=Buffer)+fread(Buffer,1,BS,stdin);} return (HD==TL)?EOF:*HD++;}
void flush(){fwrite(OT,1,OS-OT,stdout);}
void Putchar(char c){*OS++ =c;if(OS==fin)flush(),OS=OT;}
void write(int x){
if(!x){Putchar('0');return;} if(x<0) x=-x,Putchar('-');
while(x) SS[++Top]=x%10,x/=10;
while(Top) Putchar(SS[Top]+'0'),--Top;
}
int read(){
int nm=0,fh=1; char cw=Getchar();
for(;!isdigit(cw);cw=Getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=Getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
}
using namespace IO;
int n,m,p[M],tg,ct,tot,t[M];
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++) p[i]=read(),ct+=(p[i]&1);
if(ct>2){puts("Impossible");return 0;}
for(int i=2;i<=m;i++){
if(!(p[i]&1)) continue;
if(!(p[1]&1)) swap(p[1],p[i]);
else swap(p[m],p[i]);
}
if(n==1){puts("1\n1\n1\n");return 0;}
if(m==1){printf("%d\n2\n%d %d\n",p[1],1,p[1]-1);return 0;}
if(p[1]>1) t[tot=1]=p[1]-1;
for(int i=2;i<=m;i++) t[++tot]=p[i]; t[tot]++;
for(int i=1;i<=m;i++) printf("%d%c",p[i],i<m?' ':'\n');
printf("%d\n",tot);
for(int i=1;i<=tot;i++) printf("%d%c",t[i],i<tot?' ':'\n');
return 0;
}

Agc001_D Arrays and Palindrome的更多相关文章

  1. 【NOIP2017提高A组模拟9.12】Arrays and Palindrome

    [NOIP2017提高A组模拟9.12]Arrays and Palindrome[SPJ] 题目 Description Input Output Sample Input 1 6 Sample O ...

  2. AtCoder Grand Contest 001 D - Arrays and Palindrome

    题目传送门:https://agc001.contest.atcoder.jp/tasks/agc001_d 题目大意: 现要求你构造两个序列\(a,b\),满足: \(a\)序列中数字总和为\(N\ ...

  3. AtCoder AGC001D Arrays and Palindrome (构造)

    补一下原来做过的AtCoder思维题的题解 题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_d 先特判一些小的情况. 原题就相当于每个回文串 ...

  4. 【agc001d】Arrays and Palindrome

    Portal -->agc001D Description 给你一个\(m\)个数的排列\(A\),这个\(A\)中元素的顺序可以随便调换,\(A\)中的元素的和为\(n\),现在要你构造一个数 ...

  5. AGC001 D - Arrays and Palindrome【构造】

    把回文串的相等关系连一下,发现最后要求的是一笔画问题 注意到奇数长度的中间有一个单独没有连线的,所以a数组至多有两个奇数值 如果没有奇数,那么b在最前面放一个1,然后把a[1]~a[m-1]放上去,这 ...

  6. Atcoder Grand Contest 001 D - Arrays and Palindrome(构造)

    Atcoder 题面传送门 洛谷题面传送门 又是道思维题,又是道把我搞自闭的题. 首先考虑对于固定的 \(a_1,a_2,\dots,a_n;b_1,b_2,\dots,b_m\) 怎样判定是否合法, ...

  7. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

  8. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

  9. A*G#C001

    AGC001 A BBQ Easy 贪心. https://agc001.contest.atcoder.jp/submissions/7856034 B Mysterious Light 很nb这个 ...

随机推荐

  1. input propertychange(1)

    input type=“text” 通过js改变输入框的value值是不会出发input propertychange事件

  2. $《第一行代码:Android》读书笔记——第2章 Activity

    (一)创建活动 1.创建活动类 创建没有Activity的项目,发现src文件夹是空的,手动创建一个包com.jyj.demo1,在包中添加一个名为MainActivity的class,该MainAc ...

  3. VSCode隐藏node_modules目录

    使用VSCode,打开一个工程时,发现node_modules目录包含到工程中了,问题: settings.json配置如下,可以自己定制忽略的文件夹: search.exclude 用来忽略搜索的文 ...

  4. github资源下载速度慢的解决办法

    xx-net:https://github.com/XX-net/XX-Net

  5. RocketMq入坑指南

    报错信息Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.1 ...

  6. P3437 [POI2006]TET-Tetris 3D

    题目 P3437 [POI2006]TET-Tetris 3D 做法 一眼就是二维线段树,仔细想想,赋值操作怎么办??\(lazy\)标记放在一维,下一次又来放个标记二维就冲突了 正解:永久化标记 怎 ...

  7. ACM训练小结-2018年6月23日

    今天题目情况如下:    D题:SG函数相关.    相关知识忘光...已复习.    E题:丧心病狂的模拟题目.    F题:树分块+容斥.    想到了树上莫队,但是糟糕的是不会O(1)/O(lo ...

  8. usb mtp激活流程【转】

    本文转载自:https://blog.csdn.net/kc58236582/article/details/46895901 废话少说, 先上两张时序图 , 图片有点大, 建议用新窗口打开或者另存到 ...

  9. Java Comparator方法 和 Comparable接口

    默认的排序方法: 让类继承Comparable接口,重写compareTo方法. 示例代码: package com.imooc.collection; import java.util.HashSe ...

  10. MVC6 OWin Microsoft Identity 自定义验证

    1. Startup.cs中修改默认的验证设置 //app.UseIdentity(); app.UseCookieAuthentication(options => { //options.A ...