【agc001d】Arrays and Palindrome
Description
给你一个\(m\)个数的排列\(A\),这个\(A\)中元素的顺序可以随便调换,\(A\)中的元素的和为\(n\),现在要你构造一个数组\(B\)(长度为\(m1\)),满足:如果一个字符串同时满足:
1、头\(A_1\)个字符,接下来的\(A_2\)个字符,接下来的\(A_3\)个字符...接下来的\(A_m\)个字符分别构成回文串
2、头\(B_1\)个字符,接下来的\(B_2\)个字符,接下来的\(B_3\)个字符...接下来的\(B_{m1}\)个字符分别构成回文串
那么这个字符串中每一个位置上的字符都一样
Solution
日常不会构造题。。。qwq
有一个比较好的想法就是。。画蚊香。。大概是这样:

这个图对应的是\(A=\{3,2\}\)\(B=\{4,1\}\)
然后我们要做的就是。。使得连完线之后可以一笔画
然后发现如果说出现一个长度为奇数的回文串,最中间的那个点就会没有线连,然后为了让它和其他的点连上,这个点的度数必须是\(1\),然后为了保证一笔画,这样的点必须至多出现两个,所以奇数长度的回文串至多只能有两个,否则就无解了,然后多画几组会发现。。如果出现奇数长度的回文串它们还必须出现在一头一尾qwq
那么剩下的就是构造啦
当全部都是偶数的时候,我们在最开头先放一个\(1\),这样后面就错开了,然后第\(1\)到\(m-1\)都可以直接复制下来,至于最后一个回文串,我们可以放一堆\(2\)中间夹一个\(1\)这样(具体自己画一下就知道了)
当有一个奇数的时候,我们把它放在\(A\)的最后,\(B\)的前面部分的构造方式同上,最后一个长度为奇数的回文串就简单一些,直接全部上\(2\)就好了
当有两个奇数的时候,我们将其放在一头一尾,然后\(B\)的第一个元素设成\(A_1+1\),这样后面的情况就和只有一个奇数、并且已经放了一个\(1\)的情况一样了,剩下的构造同上
代码大概长这个样子
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e5+10;
int a[N],b[N*2],lis[3];
int n,m,cnt;
bool firstcheck(){
int cnt=0;
for (int i=1;i<=n;++i)
cnt+=a[i]&1;
return cnt<=2;
}
void get_b(){
int sum;
if (cnt==0){
b[++b[0]]=1; sum=m-1;
for (int i=1;i<n;++i) b[++b[0]]=a[i],sum-=a[i];
if (sum==0) return;
sum-=1; sum/=2;
for (int i=1;i<=sum/2;++i) b[++b[0]]=2;
b[++b[0]]=1;
for (int i=sum/2+1;i<=sum;++i) b[++b[0]]=2;
}
else if (cnt==1){
b[++b[0]]=1;
for (int i=1;i<n;++i) b[++b[0]]=a[i];
for (int i=1;i<=(a[n]-1)/2;++i) b[++b[0]]=2;
}
else{
b[++b[0]]=a[1]+1;
for (int i=2;i<n;++i) b[++b[0]]=a[i];
for (int i=1;i<=(a[n]-1)/2;++i) b[++b[0]]=2;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d%d",&m,&n);
for (int i=1;i<=n;++i) scanf("%d",a+i);
if (!firstcheck()){printf("Impossible\n"); return 0;}
cnt=0;
for (int i=1;i<=n;++i){
if ((a[i]&1))
lis[++cnt]=i;
}
if (lis[1]) swap(a[n],a[lis[1]]);
if (lis[2]) swap(a[1],a[lis[2]]);
for (int i=1;i<=n;++i) printf("%d ",a[i]); printf("\n");
get_b();
printf("%d\n",b[0]);
for (int i=1;i<=b[0];++i) printf("%d ",b[i]); printf("\n");
}
【agc001d】Arrays and Palindrome的更多相关文章
- 【NOIP2017提高A组模拟9.12】Arrays and Palindrome
[NOIP2017提高A组模拟9.12]Arrays and Palindrome[SPJ] 题目 Description Input Output Sample Input 1 6 Sample O ...
- 【LeetCode】9、Palindrome Number(回文数)
题目等级:Easy 题目描述: Determine whether an integer is a palindrome. An integer is a palindrome when it rea ...
- 【LeetCode】680. Valid Palindrome II
Difficulty:easy More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/valid-palindrome ...
- 【HDOJ6599】I Love Palindrome String(PAM,manacher)
题意:给出一个由小写字母组成的长为n的字符串S,定义他的子串[L,R]为周驿东串当且仅当[L,R]为回文串且[L,(L+R)/2]为回文串 求i=[1,n] 所有长度为i的周驿东串的个数 n<= ...
- 【原】Arrays.binarySearch() 的用法
Arrays.binarySearch() 的用法 1.binarySearch(Object[] a, Object key) Searches the specified array for th ...
- 【LeetCode】125. Valid Palindrome
题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...
- 【easy】479. Largest Palindrome Product
Find the largest palindrome made from the product of two n-digit numbers Since the result could be v ...
- 【leetcode】409. Longest Palindrome
problem 409. Longest Palindrome solution1: class Solution { public: int longestPalindrome(string s) ...
- 【LeetCode】214. Shortest Palindrome
Shortest Palindrome Given a string S, you are allowed to convert it to a palindrome by adding charac ...
随机推荐
- [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
废话不多说 直接上图这个是demo中用到的双目摄像头,一个是红外的,一个是正常的rgb摄像头两个usb接口,在电脑上呈现两路摄像头通道程序检测RGB输出图像,当检测到有人脸时,用RGB人脸的位置到红外 ...
- 阿里云oracle启动失败
1.监听启动失败: 将$ORACLE_HOME/network/admin 中的listener.ora中的主机名改为localhost 2.sqlplus中startup启动失败 ,出现ORA-00 ...
- PHP使用Memcache来存储session 其他【转载】
PHP使用Memcache来存储session 分类:PHP 时间:2015年3月30日 很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么PHP默认的 ...
- 如何获取启动页activity
启动页activity指App启动的第一个activity,介绍几种查看启动页activity的方法: 方法一:问开发,最有效的获取方式 方法二:dumpsys package 包名,前提是知道包名( ...
- 我是IT小小鸟读后感
<我是一只IT小小鸟>一只是我想读list中一个本,但是上次去当当买的时候,竟然缺货了...昨天监考,实在无聊,就上网看电子书了,一天就看完了,看得有点仓促,所以理解估计不深. 1.刘帅: ...
- Sprint--5.21
看到作业要求组长就召开小组成员开了一个简短的会议,会议内容大致是这样的: 1.再次明确任务:就是每一个人都要清楚知道自己扮演的角色应该做些什么,怎么去做: 2.组长定时更新博客,每一位小组成员也要写进 ...
- User survey(用户调研)
郑文武——小学二年级学生 姓名 郑文武 性别.年龄 男.9岁 职业 学生 收入 父母给的零花钱 知识层次和能力 会使用手机 生活/工作情况 努力学习但数学成 ...
- 初识asp
1.ASP(Active Server Pages 动态服务器页面)是一种生成动态交互性网页的强有力工具 <!DOCTYPE html> <html> <body> ...
- PAT 1078 字符串压缩与解压
https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088 文本压缩有很多种方法,这里我们只考虑最简单的 ...
- aes python加密
# *_*coding:utf-8 *_* #AES-demo import base64 from Crypto.Cipher import AES ''' 采用AES对称加密算法 ''' # st ...