
阿里郎
发布日期:2021-05-07 07:05:12
浏览次数:15
分类:精选文章
本文共 1525 字,大约阅读时间需要 5 分钟。
阿里郎
题目大意
n 名演员,将按n的所有约数d进行分组。同一组中的演员们将会手拉手围成一个环。第一个环中是 1 ; d + 1 ; 2 d + 1 ; 3 d + 1 … … n − d + 1 1; d + 1; 2d + 1; 3d + 1……n-d + 1 1;d+1;2d+1;3d+1……n−d+1,第二个环中是 2 ; d + 2 ; 2 d + 2 ; 3 d + 2 … … n − d + 2 2; d+2; 2d+2; 3d+2…… n-d+2 2;d+2;2d+2;3d+2……n−d+2。依次类推。
环中每个相邻的人的衣服颜色不能相同,颜色有a~z,共26种。 给出人数,求出每个演员的衣服颜色。如果颜色不够,输出“impossible”输入样例
7
输出样例
abababc
数据范围
2 <= n <= 300000
思路
这道题按着题目要求模拟就行了,只是原题题意很难看懂。
枚举每一个人,第一个人直接用第一种颜色,其他人枚举每一个圈,它旁边的人的衣服颜色都不能选,如果全部不能选则多开一种颜色,否则找一个颜色用。 最后如果颜色个数超过了26,就输出“impossible”。否则就输出答案。代码
#include#include #include using namespace std;int n,y[10001],ys;char ans[300001],d='a';bool in[27];int main(){ // freopen("arilang.in","r",stdin);// freopen("arilang.out","w",stdout); scanf("%d",&n);//读入 for (int i=1;i*i<=n;i++) if (n%i==0)//记录下n所有的约数 { y[++ys]=i; y[++ys]=n/i; if (i==n/i) ys--; } sort(y+1,y+ys+1);//把约束们从小到大排序 ans[1]='a';//初始化 for (int i=2;i<=n;i++) { memset(in,0,sizeof(in));//初始化 int b=0; bool biao=0; for (int j=1;j<=ys;j++) if (y[j]>=i) break;//会退成负数则直接退出 else { if (!in[ans[i-y[j]]-96])//圈前面那个人的颜色 { in[ans[i-y[j]]-96]=1; b++; } if (!in[ans[(i+y[j])%n]-96])//后面那个人的颜色 { in[ans[(i+y[j])%n]-96]=1; b++; } if (b>=d-96)//所有颜色都用完了 { d++; ans[i]=d; biao=1; break; } } if (!biao) for (int j=1;j<=d-96;j++) if (!in[j])//找可以用的颜色 ans[i]=j+96;//填上去 } if (d>'z') printf("impossible");//需要的颜色超过了26种 else for (int i=1;i<=n;i++) putchar(ans[i]);//输出// fclose(stdin);// fclose(stdout); return 0;}
发表评论
最新留言
很好
[***.229.124.182]2025年04月06日 10时28分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
对不起
2019-03-05
C++ 函数重载
2019-03-05
Nginx简介
2019-03-05
Nginx的Gzip功能
2019-03-05
基于.Net Core 5.0 Worker Service 的 Quart 服务
2019-03-05
Azure Storage 系列(四)在.Net 上使用Table Storage
2019-03-05
我成为 Microsoft Azure MVP 啦!(ps:不是美国职业篮球)
2019-03-05
异步编程基础
2019-03-05
[模板] 带修莫队
2019-03-05
abstract关键字的使用
2019-03-05
算法题:获取一个字符串在另一个字符串中出现的次数
2019-03-05
算法题:获取两个字符串中的最大相同子串
2019-03-05
Calendar日历类(抽象类)的使用
2019-03-05
Asp.Net Core&Jenkins持续交付到Windows Server
2019-03-05
自我总结和学习表单提交的几种方式 (一)
2019-03-05
利用Bootstrap Paginator插件和KnockoutJS完成分页功能
2019-03-05
.NET微信网页开发之使用微信JS-SDK调用微信扫一扫功能
2019-03-05
.NET微信网页开发之使用微信JS-SDK自定义微信分享内容
2019-03-05
.NET微信网页开发之使用微信JS-SDK获取当前地理位置
2019-03-05