【2020.11.28提高组模拟】T1染色(color)
【2020.11.28提高组模拟】T1染色(color)
题目
题目描述
给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq n\),若 \(i - j\) 为质数,则 \(i\) 和 \(j\) 不同色。
求出颜色尽可能少的染色方案。如果有多种方案,输出任意一种即可。
输入格式
第一行一个整数 \(n\)。
输出格式
第一行一个整数 \(k\),表示颜色数。
第二行 \(n\) 个整数 \(col_i\)(\(1 \leq col_i \leq k\)),表示 \(i\) 的颜色。
数据范围
对于\(30\%\)的数据,\(n \leq 10\);
对于 \(60\%\) 的数据,\(n \leq 20\);
对于 \(100\%\) 的数据,\(n \leq 10^4\)。
时空限制
时间限制:1s
空间限制:128MB
题解
规律题
\(n <8\)直接暴力
\(n \geq8\):\(col_i=(i-1)\%4+1\)
证明:
质数可以分为\(2\)和奇质数,如果按照奇偶性染色,则可以满足所有奇质数。但因为2,所以要按照\(mod\ 4\)方法染色
考虑答案是否有可能小于4?考虑\(1,3,6,8\),两两之间差都是质数,因此答案不能为3
综上:\(n <8\)直接暴力,\(n \geq8\):\(col_i=(i-1)\%4+1\)
Code
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans,s[10],ans1[10];
bool bj,p[100],color[10];
bool judge()
{
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
if (p[i-j]&&s[i]==s[j]) return false;
return true;
}
void dg(int x)
{
if (x>n)
{
if (judge())
{
int sum=0;
for (int i=1;i<=4;++i)
if (color[i]) ++sum;
if (sum<ans)
{
ans=sum;
for (int i=1;i<=n;++i)
ans1[i]=s[i];
}
}
return;
}
for (int i=1;i<=4;++i)
{
s[x]=i;
bool bz=color[i];
color[i]=true;
dg(x+1);
color[i]=bz;
s[x]=0;
}
}
int main()
{
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
memset(p,true,sizeof(p));
for (int i=2;i<=8;++i)
for (int j=2;j<=8;++j)
p[i*j]=false;
p[0]=p[1]=false;
scanf("%d",&n);
if (n<8)
{
ans=10;
dg(1);
printf("%d\n",ans);
for (int i=1;i<=n;++i)
printf("%d ",ans1[i]);
}
else
{
printf("4\n");
for (int i=1;i<=n;++i)
printf("%d ",(i-1)%4+1);
}
fclose(stdin);
fclose(stdout);
return 0;
}
【2020.11.28提高组模拟】T1染色(color)的更多相关文章
- 【2020.11.28提高组模拟】T2 序列(array)
序列(array) 题目描述 给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...
- 【2020.11.30提高组模拟】剪辣椒(chilli)
剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...
- 【2020.11.30提高组模拟】删边(delete)
删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...
- 【2020.12.03提高组模拟】A组反思
估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...
- 【2020.12.01提高组模拟】A组反思
105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...
- 11.5NOIP2018提高组模拟题
书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...
- 【2020.12.02提高组模拟】A组反思
55,rk47 T1 赛时先想了\(trie\),想到不一定是前缀,然后就放弃转为打暴力 得分:\(RE22\) 正解是只用判断\(i\)与\(i+1\)的关系,那么只有两种情况,判断一下然后\(dp ...
- 【2020.12.01提高组模拟】卡特兰数(catalan)
题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...
- 【2020.12.02提高组模拟】球员(player)
题目 题目描述 老师们已经知道学生喜欢睡觉,Soaring是这项记录保持者.他只会在吃饭或玩FIFA20时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...
随机推荐
- php的三元运算符
简单记录一哈php的三元运算符的用法: 啥子是三元运算,即第一个表达式作为判断条件,在后面两个表达式中选择一个执行. 若判断成立,则执行第二个表达式,否则执行第三个表达式. 看到好多网友都说的不 ...
- 这个蒟蒻也开通wordpress博客啦~
RT,欢迎各位dalao常来菜鸡博客玩,加友链什么的最好了~ 传送门(请注意https不能漏,因为本菜鸡的家用宽带只有443端口). 以后博客园的博客会同步更新. 这个人太颓了,只打算在wordpre ...
- java 执行shell命令及日志收集避坑指南
有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...
- [POJ 2821]TN's Kindom III(任意长度循环卷积的Bluestein算法)
[POJ 2821]TN's Kindom III(任意长度循环卷积的Bluestein算法) 题面 给出两个长度为\(n\)的序列\(B,C\),已知\(A\)和\(B\)的循环卷积为\(C\),求 ...
- Java—字符流
一.字符流 字符流概述: 在操作过程中字节流可以操作所有数据,操作的文件中有中文字符,并且需要对 中文字符做出处理 二.字符编码表 文字-->(数字):编码."abc".ge ...
- JS中的Array之方法(1)
a=[2,4,5,6,7,90]; [1]. a.toString(); // 返回字符串表示的数组,逗号分隔 "2,4,5,6,7,90" [2]. a.join('||'); ...
- Andrew Ng 机器学习公开课 - 线性回归
我的机器学习系列从现在开始将会结合Andrew Ng老师与sklearn的api是实际应用相结合来写了. 吴恩达(1976-,英文名:Andrew Ng),华裔美国人,是斯坦福大学计算机科学系和电子工 ...
- 线程范围内的环境变量---ThreadLocal
package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; p ...
- linux 图解笔记
- 调整PG分多次调整和一次到位的迁移差别分析
前言 这个问题来源于我们研发的一个问题,在进行pg调整的时候,是一次调整到位好,还是分多次调整比较好,分多次调整的时候会不会出现某个pg反复挪动的问题,造成整体迁移量大于一次调整的 最近自己的项目上也 ...