20162017-ct-s03e02-codeforces-trainings-season-3-episode-2-en-I Painting the natural numbers

题意:用10种颜色染1-n这n个数字,染色需满足:a,b(a可以等于b)同一种颜色,则a+b必须是另一种颜色(n<=25000)

题解:若当前已用k种颜色染好n个数字,则可以扩展成3n+1个数字:

{n个数字,k种颜色}{n+1个,第(k+1)种颜色}{n个数字,k种颜色}


用这种方法10种颜色可以达到29000


#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdlib>

using namespace std;

const int N=30000;
int n;
int a[N];
int main()
{
    int Now=1;a[1]=0;
    for (int K=1;K<10;K++){
        for (int i=Now+1;i<=Now+Now+1;i++)a[i]=K;
        for (int i=2*Now+2;i<=Now*3+1;i++)a[i]=a[i-Now*2-1];
        Now=3*Now+1;
    }
    cin>>n;
    for (int i=1;i<=n;i++)printf("%d",a[i]);
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值