hdu4982(思维题)

赶脚我的思维已经到了极限了,好难懂

/*
* this code is made by LinMeiChen
* Problem:
* Type of Problem:
* Thinking:
* Feeling:
*/
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
#define maxn 210000
int Hash[maxn] = { 0 }; void Hash_Map() { int temp = sqrt((double)maxn); temp++;
    Hash[0] = 1; for (int i = 1; i <= temp; i++)
        Hash[i*i] = 1; } bool Judge(int x, int n, int k) { int not = n - x; int sum = 0, a = 0; for (int i = 1; i <= k - 2; i++) {
        a++; if (a == not)
            a++;
        sum += a; }// printf("%d %d\n", sum, x);
 if (sum + not >= n) return false; int left = x - sum; if (left <= a) return false;
    a++; if (a == not || a + 1 == not) { if (left == not) return false; } return true; } int main() {
    Hash_Map(); int n, k, m; while (scanf("%d%d", &n, &k) != EOF) { bool find = false; for (int i = n - 1; i >= 1; i--) if (Hash[i]) if (Judge(i, n, k)) {
            find = true; break; } if (find)
            printf("YES\n"); else
            printf("NO\n"); } return 0; }
/*
2 2
4 2
22 4
5 2
6 2
11 4
25 7
*/
/*
没过数据:22 6
输出:    NO
*/

你可能感兴趣的:(hdu4982(思维题))