【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时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...
随机推荐
- FastThreadLocal 是什么鬼?吊打 ThreadLocal 的存在!!
ThreadLocal 大家都知道是线程本地变量,今天栈长再介绍一个神器:FastThreadLocal,从字面上看就是:Fast + ThreadLocal,一个快的 ThreadLocal?这到底 ...
- Android Google官方文档解析之——Device Compatibility
Android is designed to run on many different types of devices, from phones to tablets and television ...
- leetcode两数之和go语言
两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...
- jquery自定义弹层显示大图(兼容多层iframe)
1.介绍 a:可用于多层iframe中,显示在最外层 b:动画效果为从点击的图片位置开始放大至全屏显示 2.效果图 3.js代码 1 function ShowMaxImg(src, y, x, w, ...
- 10before_request钩子函数
1,什么是钩子函数? 就是运行别人前都得先运行他: from flask import Flask app = Flask(__name__) @app.route('/') def hello_wo ...
- Pandas_VBA_数据分类比较
Python与VBA的比较2 需求: input文件中有两列数据,第一列为Name,第二列为Score,Name列里有重复的值,要求按照name的唯一值统计 score,输出到output文件按中. ...
- ixgbe 驱动 为xxx驱动做准备1
网卡都是pci设备,因此这里每个网卡驱动其实就是一个pci驱动.并且intel这里是把好几个万兆网卡(82599/82598/x540)的驱动做在一起的.V4L2 一样几个类型摄像头合并在一起 先说一 ...
- linux 内核 同步原理
中断分为同步中断和异步中断. 同步中断是由CPU控制单元产生的,"同步"是指只有在一条指令执行完毕后,CPU才会发出中断,比如系统调用 异步中断是由其他硬件设备依照CPU时钟信号产 ...
- leetcode 30day--2
202. Happy Number Write an algorithm to determine if a number n is "happy". A happy number ...
- shell 脚本之set 命令(转)
服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节. set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题.本文介绍它的基本用法,让你可以更安心地使用 ...