zoukankan      html  css  js  c++  java
  • HDU校赛 | 2019 Multi-University Training Contest 4

    2019 Multi-University Training Contest 4

    http://acm.hdu.edu.cn/contests/contest_show.php?cid=851

    1001. AND Minimum Spanning Tree

    如果(n ot =2^x-1)那么答案为(0),可以这么构造:

    对于(i e 2^x-1)(i)连向第一个比(i)小的(j),并且(i&j=0)

    否则(i)连向(i+1),把这两个点绑在一起就好了。

    如果(n=2^x-1)上面的构造只有一个地方有问题,就是(i=n)的情况,那么(i)连向(1)号节点就好了。

    #include<bits/stdc++.h>
    using namespace std;
    
    void read(int &x) {
        x=0;int f=1;char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
    }
    
    void print(int x) {
        if(x<0) putchar('-'),x=-x;
        if(!x) return ;print(x/10),putchar(x%10+48);
    }
    void write(int x) {if(!x) putchar('0');else print(x);putchar('
    ');}
    
    #define lf double
    
    #define pii pair<int,int >
    #define vec vector<int >
    
    #define pb push_back
    #define mp make_pair
    #define fr first
    #define sc second
    
    #define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)
    
    const int maxn = 1e6+10;
    const int inf = 1e9;
    const lf eps = 1e-8;
    const int mod = 1e9+7;
    
    int sta[maxn],ans;
    
    void solve() {
        int n;read(n);ans=0;
        for(int i=2;i<=n;i++) {
            int bo=-1;
            for(int j=0;(1<<j)<=i;j++)
                if(!(i&(1<<j))) {bo=j;break;}
            if(bo==-1) sta[i]=n==i?1:i+1,ans+=n==i;
            else sta[i]=1<<bo;
        }write(ans);
        for(int i=2;i<=n;i++) printf("%d%c",sta[i],i==n?'
    ':' ');
    }
    
    int main() {
        int t;read(t);while(t--) solve();
        return 0;
    }
    

    1008. K-th Closest Distance

    二分距离,主席树维护就好了。

    #include<bits/stdc++.h>
    using namespace std;
    
    void read(int &x) {
        x=0;int f=1;char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
    }
    
    void print(int x) {
        if(x<0) putchar('-'),x=-x;
        if(!x) return ;print(x/10),putchar(x%10+48);
    }
    void write(int x) {if(!x) putchar('0');else print(x);putchar('
    ');}
    
    #define lf double
    
    #define pii pair<int,int >
    #define vec vector<int >
    
    #define pb push_back
    #define mp make_pair
    #define fr first
    #define sc second
    
    #define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)
    
    const int maxn = 1e6+10;
    const int inf = 1e9;
    const lf eps = 1e-8;
    const int mod = 1e9+7;
    
    int rt[maxn];
    
    struct chairman_tree {
        int ls[maxn*40],rs[maxn*40],s[maxn*40],seg;
    
        void modify(int &p,int pre,int l,int r,int x) {
            p=++seg;ls[p]=ls[pre],rs[p]=rs[pre],s[p]=s[pre]+1;
            if(l==r) return ;int mid=(l+r)>>1;
            if(x<=mid) modify(ls[p],ls[pre],l,mid,x);
            else modify(rs[p],rs[pre],mid+1,r,x);
        }
    
        int query(int a,int b,int l,int r,int x,int y) {
            if(x<=l&&r<=y) return s[b]-s[a];
            int mid=(l+r)>>1,ans=0;
            if(x<=mid) ans+=query(ls[a],ls[b],l,mid,x,y);
            if(y>mid) ans+=query(rs[a],rs[b],mid+1,r,x,y);
            return ans;
        }
    
        void clear() {
            for(int i=1;i<=seg;i++) s[i]=ls[i]=rs[i]=0;
        }
    }T;
    
    int n;
    
    void solve() {
        int m,la=0;read(n),read(m);
        for(int i=1,x;i<=n;i++) read(x),T.modify(rt[i],rt[i-1],1,1e6,x);
        for(int i=1;i<=m;i++) {
            int l,r,p,k;read(l),read(r),read(p),read(k);
            l^=la,r^=la,p^=la,k^=la;
            int L=0,R=1e6;
            while(L<=R) {
                int mid=(L+R)>>1;
                if(T.query(rt[l-1],rt[r],1,1e6,max(1,p-mid),min((int)1e6,p+mid))>=k) R=mid-1,la=mid;
                else L=mid+1;
            }write(la);
        }
    }
    
    void clear() {
        for(int i=1;i<=n;i++) rt[i]=0;
        T.clear();
    }
    
    int main() {
        int t;read(t);while(t--) solve(),clear();
        return 0;
    }
    

    1010. Minimal Power of Prime

    我们定一个阀值(B=lceilsqrt[5]{n} ceil)

    然后我们把小于(B)的质数全部弄出来,试着除一遍(n)

    最坏的情况就是这个时候(n)还没有变化,那么说明(n)一定是由不超过(4)个大于(B)的质数乘起来的。

    然后判断一下(n)是不是完全平方数,立方数,四次方数,如果不是那么(n)的答案必然是(1),因为(n)不可能是一个形如(a^2b^3)的数。

    #include<bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    
    void read(int &x) {
        x=0;int f=1;char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
    }
    
    void print(int x) {
        if(x<0) putchar('-'),x=-x;
        if(!x) return ;print(x/10),putchar(x%10+48);
    }
    void write(int x) {if(!x) putchar('0');else print(x);putchar('
    ');}
    
    #define lf double
    
    #define pii pair<int,int >
    #define vec vector<int >
    
    #define pb push_back
    #define mp make_pair
    #define fr first
    #define sc second
    
    #define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++)
    
    const int maxn = 1e6+10;
    const int inf = 1e9;
    const lf eps = 1e-8;
    const int mod = 1e9+7;
    const int B = 5000;
    
    int pri[maxn],tot,vis[maxn];
    
    void sieve() {
        for(int i=2;i<=B;i++) {
            if(!vis[i]) pri[++tot]=i;
            for(int j=1;j<=tot&&i*pri[j]<=B;j++) {
                vis[i*pri[j]]=1;
                if(i%pri[j]==0) break;
            }
        }
    }
    
    void solve() {
        int n,ans=1e9;read(n);
        for(int i=1;i<=tot;i++) {
            if(n%pri[i]) continue;
            int tmp=0;
            while(n%pri[i]==0) tmp++,n/=pri[i];
            ans=min(ans,tmp);
        }if(ans==1||n==1) {write(ans);return ;}
        for(int i=4;i>=2;i--) {
            int x=pow(n,1.0/i);
            for(int j=max(x-10,0ll);j<=x+10;j++)
                if(pow(j,i)==n) {write(min(ans,i));return ;}
        }write(1);
    }
    
    signed main() {
        sieve();
        int t;read(t);while(t--) solve();    
        return 0;
    }
    
  • 相关阅读:
    PAT 1006 Sign In and Sign Out
    PAT 1004. Counting Leaves
    JavaEE开发环境安装
    NoSql数据库探讨
    maven的配置
    VMWARE 下使用 32位 Ubuntu Linux ,不能给它分配超过3.5G 内存?
    XCODE 4.3 WITH NO GCC?
    在苹果虚拟机上跑 ROR —— Ruby on Rails On Vmware OSX 10.7.3
    推荐一首让人疯狂的好歌《Pumped Up Kicks》。好吧,顺便测下博客园可以写点无关技术的帖子吗?
    RUBY元编程学习之”编写你的第一种领域专属语言“
  • 原文地址:https://www.cnblogs.com/hbyer/p/11301443.html
Copyright © 2011-2022 走看看