aaa

#pragma GCC optimize(2)
#include <iostream>
#include <map>
#include <ctime>
#include <vector>
#include <climits>
#include <algorithm>
#include <random>
#include <cstring>
#include <cstdio>
#include <map>
#include <set>
#include <bitset> 
#include <queue>
#define inf 0x3f3f3f3f
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define rep(i, a, n) for(int i = a; i <= n; ++ i)
#define per(i, a, n) for(int i = n; i >= a; -- i)
#define ONLINE_JUDGE
using namespace std;
typedef long long ll;
const int mod=1e9+7;
template<typename T>void write(T x)
{
    if(x<0)
    {
        putchar('-');
        x=-x;
    }
    if(x>9)
    {
        write(x/10);
    }
    putchar(x%10+'0');
}

template<typename T> void read(T &x)
{
    x = 0;char ch = getchar();ll f = 1;
    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}
    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}

int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int lcm(int a,int b){return a/gcd(a,b)*b;};
ll ksm(ll a,ll n){
    ll ans=1;
    while(n){
        if(n&1) ans=(ans*a)%mod;
        a=a*a%mod;
        n>>=1;
    }
    return ans%mod;
}
//==============================================================
const int maxn=2e5+100;
const int maxai=1e7+100;
int a[maxn];
int vis[maxai];
int n;
int solve(){
    rep(i,1,n){
        vis[a[i]]++;
    }
    int res=0;
    per(i,1,maxai){
        if(!vis[i]) continue;
        int ans=vis[i];
        for(int j=i+i;j<maxai;j+=j){
            ans+=vis[i];
        }
        res=max(res,ans);
    }
    return res;
}

int main()
{
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    //clock_t c1 = clock();
    //===========================================================
    read(n);
    rep(i,1,n) read(a[i]);
    write(solve());
    //===========================================================
    //std::cerr << "Time:" << clock() - c1 << "ms" << std::endl;
    return 0;
}

;;

#include <bits/stdc++.h>
using namespace std;
int n,m;
int ans=0;
int dir[][2]={-1,-2,-2,-1,-2,1,-1,2};
int have[100][100];
void dfs(int x,int y,int cnt){
    int dx=x,dy=y+1;
    if(y>m) dx++,dy=1;
    if(x>n){
        int res=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                res+=have[i][j];
            }
        }
        ans=max(ans,res);
        return ;
    }
    dfs(dx,dy,cnt);
    int flag=0;
    for(int i=0;i<4;i++){
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(xx<=0||yy<=0||xx>n||yy>m) continue;
        if(have[xx][yy]){
            flag=1;
            break;
        }
    }
    if(!flag){
        have[x][y]=1;
        dfs(dx,dy,cnt+1);
        have[x][y]=0;
    }
    return ;
}

int main(){
    while(cin>>n>>m){
        ans=0;
        dfs(1,1,0);
        cout<<ans<<endl;
    }
    return 0;
}
全部评论

相关推荐

05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务