614E - Necklace

思路:如果奇数超过1个,那么答案是0;否则,所有数的gcd就是答案。

构造方案:每个数都除以gcd,如果奇数个仍旧不超过1个,找奇数个那个在中间(如果没有奇数默认a),其他的平均分到两边。

如果奇数个数超过1个,为了保证中间点之间的每个字母个数是偶数个,那么就拿上种情况的两个构造一段(两个对称拼成一段)。

代码

#include<bits/stdc++.h>
using namespace std;
int a[];
const int N=2e6;
char s[N];
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n;
cin>>n;
int cnt=;
for(int i=;i<n;i++)
{
cin>>a[i];
if(a[i]&)cnt++;
}
if(n==)
{
cout<<a[]<<endl;
for(int i=;i<a[];i++)
cout<<'a';
cout<<endl;
return ;
}
if(cnt>=)
{
cout<<<<endl;
for(int i=;i<n;i++)
{
for(int j=;j<a[i];j++)cout<<(char)(i+'a');
}
cout<<endl;
return ;
}
int ans=gcd(a[],a[]);
for(int i=;i<n;i++)
ans=gcd(ans,a[i]);
int l=1e6,r=1e6+;
int index=;
for(int i=;i<n;i++)
{
a[i]/=ans;
if(a[i]&)index=i;
}
cnt=;
for(int i=;i<n;i++)
{
if(a[i]&)cnt++;
}
for(int i=;i<a[index];i++)
{
s[r++]='a'+index;
//cout<<s[r-1]<<endl;
}
bool flag=true;
for(int i=;i<n;i++)
{
if(i==index)continue;
while(a[i]!=)
if(flag)
{
s[l--]='a'+i;
a[i]--;
flag=false;
}
else
{
s[r++]='a'+i;
a[i]--;
flag=true;
}
}
string as;
for(int i=l+;i<r;i++)as+=s[i];
if(cnt>=)for(int i=r-;i>l;i--)as+=s[i];
cout<<ans<<endl;
if(cnt>=)ans/=;
for(int i=;i<ans;i++)
cout<<as;
cout<<endl;
return ;
}

Codeforces 614E - Necklace的更多相关文章

  1. [CodeForces - 614E] E - Necklace

    E - Necklace Ivan wants to make a necklace as a present to his beloved girl. A necklace is a cyclic ...

  2. Codeforces Round #339 (Div. 1) C. Necklace 构造题

    C. Necklace 题目连接: http://www.codeforces.com/contest/613/problem/C Description Ivan wants to make a n ...

  3. Codeforces 526D - Om Nom and Necklace 【KMP】

    ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1 ...

  4. Codeforces - ZeptoLab Code Rush 2015 - D. Om Nom and Necklace:字符串

    D. Om Nom and Necklace time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. 【Codeforces 526D】Om Nom and Necklace

    Codeforces 526 D 题意:给一个字符串,求每个前缀是否能表示成\(A+B+A+B+\dots+A\)(\(k\)个\(A+B\))的形式. 思路1:求出所有前缀的哈希值,以便求每个子串的 ...

  6. Codeforces 526D Om Nom and Necklace (KMP)

    http://codeforces.com/problemset/problem/526/D 题意 给定一个串 T,对它的每一个前缀能否写成 A+B+A+B+...+B+A+B+A+B+...+B+A ...

  7. Codeforces 526.D Om Nom and Necklace

    D. Om Nom and Necklace time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. CodeForces 526D Om Nom and Necklace

    洛谷题目页面传送门 & CodeForces题目页面传送门 给定字符串\(a\),求它的每一个前缀,是否能被表示成\(m+1\)个字符串\(A\)和\(m\)个字符串\(B\)交错相连的形式, ...

  9. Codeforces 1361C - Johnny and Megan's Necklace(欧拉回路)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这个题作为 D1C 还是蛮合适的-- 首先不难发现答案不超过 \(20\),所以可以直接暴力枚举答案并 check 答案是否 ...

随机推荐

  1. distinct count

    实验:查询一个column的无重复记录,需要知道有多少条记录,并显示记录. 统计记录用count(*)函数,无重复记录distinct,以emp表为例. (1)先查询无重复记录 [@more@] SQ ...

  2. 开发安卓安装流程(codorva+ionic)

    开发安卓安装流程 0 安装操作系统  Win10   用户名称尽量英文字母加数字,避免编码问题 1 安装Java sdk 1.8.0_45   所需文件 jdk-8u45-windows-x64 1. ...

  3. 2:3 Action的配置

    < 一 作用> 一:封装工作单元(相当于是控制层,封装出modelAndView) 二:定义name属性接受前台传过来的数据,再定义message属性,用于存放返回前台页面展示的数 据,实 ...

  4. MyBatis学习笔记(三)——优化MyBatis配置文件中的配置

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的 ...

  5. 负载均衡之-LVS

    负载均衡用的很多,这里对负载均衡做一个总结吧,总共包含下面几片博文. LVS负载均衡 keepalived负载均衡+高可用 haproxy负载均衡 nginx负载均衡 LVS负载均衡 LVS是章文嵩博 ...

  6. apache中的https设置基于阿里云免费ssl服务

    环境是:debian7+apache2.2+阿里云免费ssl服务,站点以前的http已经在运行了, 1.开通阿里云免费SSL&DNS解析配置 购买位置:打开阿里云找到“产品”-“安全”-“CA ...

  7. 20145106《Java程序设计》第7周学习总结

    教材学习内容总结 使用Lambda的特性可以去除重复的信息,以取得语法的简洁,增加程序代码的表达性.Lambda表达式本身是中性的,不代表任何类型的实例,同样的Lambda表达式,可用来表示不同目标类 ...

  8. 20145335郝昊《网络攻防》Exp9 Web安全基础实践

    20145335郝昊<网络攻防>Exp9 Web安全基础实践 实验内容 理解常用网络攻击技术的基本原理. 完成WebGoat实践下相关实验 实验步骤 XSS注入攻击 Phishing wi ...

  9. linux内核分析 1、2章读书笔记

    一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...

  10. Java查找算法之二分查找

    二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...