【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时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...
随机推荐
- DP百题练(二)
目录 DP百题练(二) 区间 DP NOI1995 石子合并 IOI1998 Polygon CH5302 金字塔 USACO06FEB Treats for the Cows G/S LG1043 ...
- 浅谈Linux桌面(发行版及桌面环境)
Part I: 前言 笔者2018年接触Linux(当时还是学校机房的Ubuntu 14.04 LTS),至今已经有4个年头了. 折腾了至少十几个Linux发行版,包括但不限于: ubuntu.Deb ...
- XJOI 夏令营501-511测试11 统计方案
小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来.你 ...
- Java_基础(一)
注释 单行注释: // 多行注释: /*开头, */结尾, 可跨行, 可嵌入 public static void main(String[] args/* 哈哈 */) 文档注释: /** 开头, ...
- 对ESP8266的例子进行编译时报错check_python_dependencies的问题的解决
尝试对ESP8266的例子进行编译时报错: make: *** 没有规则可制作目标"check_python_dependencies" 解决方法: 1.安装python pip包 ...
- Spring Boot 2.4 正式发布,重大调整!!!
大家周末愉快啊,Spring Boot 2.3.5 没发布几天,你看,还是 1 周前发布的: 昨天又有粉丝留言说 Spring Boot 2.4.0 已经发布了: 我了个去,栈长赶紧跑到 Spring ...
- Oracle数据库操作相关
1. 导出dmp 文件 (1)导出数据库所有的用户数据: exp system/manage@ORCL file=D:\oracle_dmp\data1.dmp full=y (2)导出指定的用户数据 ...
- java服务器部署开源项目(若依)
1准备工作 (1)阿里云 centos_8_0_x64_20G_alibase_20200218.vhd [root@iZ2zeeqw5fxmm9zagf439aZ ~]# cat /etc/redh ...
- HTTP介绍(一)
超文本传输协议(HTTP)是一种用于分布式,协作式超媒体信息系统的应用程序层协议.HTTP是万维网(World Wide Web)数据通信的基础,超文本文档包括指向用户可以轻松访问的其他资源的超链接, ...
- flink1.10版本StreamGraph生成过程分析
1.StreamGraph本质 本质就是按照用程序代码的执行顺序构建出来的用于向执行环境传输的流式图,并且可以支持可视化展示给用户的一种数据结构. 2.StreamGraph.StreamNode和S ...