zoukankan      html  css  js  c++  java
  • [CF45G]Prime Problem

    题目大意:将$1$到$n(1<nleqslant6000)$分成若干组数,要求每组数的和均为质数,若存在一种分配方式,输出每个数所在的组的编号,有多组解输出任意一组解,若不存在,输出$-1$

    题解:根据这一题的结论分[CF735D]Taxes

    卡点:未判断奇数分成$3$个质数的情况

    C++ Code:

    #include <cstdio>
    #define maxn 6010
    int n;
    int bel[maxn], idx;
    inline bool isp(int x) {
    	for (int i = 2; i * i <= x; i++) {
    		if (x % i == 0) return false;
    	}
    	return true; 
    }
    void solve(int x) {
    	if (isp(x)) {
    		idx++;
    		for (int i = n; i; i--) {
    			if (x >= i && !bel[i]) {
    				bel[i] = idx;
    				x -= i;
    			}
    		}
    		return ;
    	}
    	if (x & 1) {
    		if (isp(x - 2)) solve(2), solve(x - 2);
    		else solve(3), solve(x - 3);
    		return ;
    	}
    	for (int i = x + 1 >> 1; i > 1; i--) if (isp(i) && isp(x - i)) {
    		solve(i), solve(x - i);
    		return ;
    	}
    	
    }
    int main() {
    	scanf("%d", &n);
    	solve(n * (n + 1) >> 1);
    	for (int i = 1; i <= n; i++) {
    		printf("%d", bel[i]);
    		putchar(i == n ? '
    ' : ' ');
    	} 
    	return 0;
    }
    

      

  • 相关阅读:
    HDU 1017—A Mathematical Curiosity
    N !
    L
    J
    Danganronpa
    A water problem
    hdu 5461 Largest Point
    India and China Origins hdu 5652 (BFS+二分)
    D (多校训练三) poj1919 (二分)
    Discovering Gold lightoj 1030 (dp+期望)
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9843739.html
Copyright © 2011-2022 走看看