做书籍封皮的网站,淘宝做网站费用,深圳商业网站建设系统,在线教育网站有什么程序做阿里郎
jzoj 2012
题目大意#xff1a;
有一个数n#xff0c;求出它的所有约数d#xff0c;有多少个约数就分多少种情况#xff0c;每次分为d组#xff0c;把1,d1,2d1……n-d1分为一组#xff0c;以此类推#xff0c;把2,d2,2d2……n-d2分为另一组#xff0c;然后同…阿里郎
jzoj 2012
题目大意
有一个数n求出它的所有约数d有多少个约数就分多少种情况每次分为d组把1,d1,2d1……n-d1分为一组以此类推把2,d2,2d2……n-d2分为另一组然后同一组内相邻的人编号不能相同现在要求字典序最小的编号总和若无解输出Impossible
样例输入
7样例输出
abababc数据范围限制
2 n 300000.
解题思路
枚举每一个点再枚举每一个环把每个环中出现过的去掉然后取最小的每个点都这样求出来即可
代码
#includecstdio
#includecstring
#includeiostream
using namespace std;
int n,tt,tot,s[300500],a[300500],p[50];
int main()
{scanf(%d,n);for (int i1;in;i)if (n%i0)s[tot]i;a[1]1;for (int i2;in;i){memset(p,0,sizeof(p));for (int j1;jtot;j)p[a[(is[j]-1)%n1]]1,p[a[(in-s[j])%n]]1;//旁边的两个数for (int j1;j26;j)if (!p[j])//没用过的{a[i]j;break;}if (!a[i])//无解{printf(Impossible);tt1;break;}}if (!tt)for (int i1;in;i)putchar(a[i]96);//输出return 0;
}