2019 ICPC Asia Nanjing Regional A,A Hard problem (规律)

题意:给你一个n,然后让你让你找一个最小的子集属于 {1,2,3,4......n},然后这个子集中存在 一个u,v,使得u 是v 的因子。让你输出这个子集的大小。

思路:打表找规律。

一开始找错规律了,认为是 1 ~ n 中素数的个数 + 1............然后就悲剧了。。。。浪费了不少时间,还是往错误的方向努力,而且没有验证。

如果正确的打表,发现会是 0,2,3,3,4,4,5,5,6,6,7,7................... 可以构造一个通项   (n - 1)/2 + 2

AC Code:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;
#define read(x) scanf("%d",&x)
#define Read(x,y) scanf("%d%d",&x,&y)
#define gc(x)  scanf(" %c",&x);
#define mmt(x,y)  memset(x,y,sizeof x)
#define write(x) printf("%d\n",x)
#define pii pair
#define INF 0x3f3f3f3f
#define ll long long
const ll mod =  998244353;
const int N = 1e5;
const int M = 2e6 + 1005;
bool vis[N];
int  main()
{
    ll T;
    scanf("%lld",&T);
    for(int i = 1;i <= T;++i){
        ll x;
        scanf("%lld",&x);

        if(x == 1) cout<<0<

 

你可能感兴趣的:(暴力,思维,枚举)