【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)的更多相关文章

  1. 【2020.11.28提高组模拟】T2 序列(array)

    序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

  2. 【2020.11.30提高组模拟】剪辣椒(chilli)

    剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...

  3. 【2020.11.30提高组模拟】删边(delete)

    删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...

  4. 【2020.12.03提高组模拟】A组反思

    估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...

  5. 【2020.12.01提高组模拟】A组反思

    105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...

  6. 11.5NOIP2018提高组模拟题

    书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

  7. 【2020.12.02提高组模拟】A组反思

    55,rk47 T1 赛时先想了\(trie\),想到不一定是前缀,然后就放弃转为打暴力 得分:\(RE22\) 正解是只用判断\(i\)与\(i+1\)的关系,那么只有两种情况,判断一下然后\(dp ...

  8. 【2020.12.01提高组模拟】卡特兰数(catalan)

    题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...

  9. 【2020.12.02提高组模拟】球员(player)

    题目 题目描述 老师们已经知道学生喜欢睡觉,Soaring是这项记录保持者.他只会在吃饭或玩FIFA20时才会醒来.因此,他经常做关于足球的梦,在他最近的一次梦中,他发现自己成了皇家马德里足球俱乐部的 ...

随机推荐

  1. FastThreadLocal 是什么鬼?吊打 ThreadLocal 的存在!!

    ThreadLocal 大家都知道是线程本地变量,今天栈长再介绍一个神器:FastThreadLocal,从字面上看就是:Fast + ThreadLocal,一个快的 ThreadLocal?这到底 ...

  2. Android Google官方文档解析之——Device Compatibility

    Android is designed to run on many different types of devices, from phones to tablets and television ...

  3. leetcode两数之和go语言

    两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...

  4. jquery自定义弹层显示大图(兼容多层iframe)

    1.介绍 a:可用于多层iframe中,显示在最外层 b:动画效果为从点击的图片位置开始放大至全屏显示 2.效果图 3.js代码 1 function ShowMaxImg(src, y, x, w, ...

  5. 10before_request钩子函数

    1,什么是钩子函数? 就是运行别人前都得先运行他: from flask import Flask app = Flask(__name__) @app.route('/') def hello_wo ...

  6. Pandas_VBA_数据分类比较

    Python与VBA的比较2 需求: input文件中有两列数据,第一列为Name,第二列为Score,Name列里有重复的值,要求按照name的唯一值统计 score,输出到output文件按中. ...

  7. ixgbe 驱动 为xxx驱动做准备1

    网卡都是pci设备,因此这里每个网卡驱动其实就是一个pci驱动.并且intel这里是把好几个万兆网卡(82599/82598/x540)的驱动做在一起的.V4L2 一样几个类型摄像头合并在一起 先说一 ...

  8. linux 内核 同步原理

    中断分为同步中断和异步中断. 同步中断是由CPU控制单元产生的,"同步"是指只有在一条指令执行完毕后,CPU才会发出中断,比如系统调用 异步中断是由其他硬件设备依照CPU时钟信号产 ...

  9. leetcode 30day--2

    202. Happy Number Write an algorithm to determine if a number n is "happy". A happy number ...

  10. shell 脚本之set 命令(转)

    服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节. set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题.本文介绍它的基本用法,让你可以更安心地使用 ...