zoukankan      html  css  js  c++  java
  • 20161024模拟

    总结:

     

    T1 数论+模拟

     累乘(两头是1)

    (在mod 1e9+7意义下)

     

    T2 最大值最小->二分答案

    (过可以到达的最远点进行二分)

     

    T3 不会啊

    T1代码(100分)

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    using namespace std;
    const int N=1e5+10;
    const int mod=1e9+7;
    ll n,m,sum,ha,cnt,w[N],t[N],prime[N];
    bool check[N];
    inline void first(){
        for(int i=2;i<=n;i++){
            if(!check[i]) prime[++sum]=i;
            for(int j=1;j<=sum&&prime[j]*i<=n;j++){
                check[i*prime[j]]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
    pair<ll,ll> a[N];
    ll Fpow(ll a,ll p){
        ll res=1;
        for(;p;p>>=1,a=a*a%mod) if(p&1) res=res*a%mod;
        return res;
    }
    int main(){
        freopen("lantern.in","r",stdin);
        freopen("lantern.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++) scanf("%d",&w[i]);
        sort(w+1,w+m+1);
        first();
        if(w[1]>1) a[++cnt]=make_pair(w[1]-1,1);
        if(w[m]<n) a[++cnt]=make_pair(n-w[m],1);
        for(int i=2,l;i<=m;i++){
            if((l=w[i]-w[i-1]-1)>0){
                a[++cnt]=make_pair(l,Fpow(2,l-1));
            }
        }
        for(int j=1;j<=sum;j++){
            ha=n-m;
            if(ha<prime[j]) break;
            while(ha){
                t[j]+=ha/prime[j];
                ha/=prime[j];
            }
        }
        for(int i=1;i<=cnt;i++){
            for(int j=1;j<=sum;j++){
                ha=a[i].first;
                if(ha<prime[j]) break;
                while(ha){
                    t[j]-=ha/prime[j];
                    ha/=prime[j];
                }
            }
        }
        ll ans=1;
        for(int i=1;i<=sum;i++){
            ans=(ans%mod*Fpow(prime[i],t[i])%mod)%mod;
        }
        for(int i=1;i<=cnt;i++) ans=ans*a[i].second%mod;
        printf("%I64d",ans);
        return 0;
    }

     

    T2代码(100分)

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    #ifdef unix
    #define LL "%lld"
    #else
    #define LL "%I64d"
    #endif
    using namespace std;
    const int N=1e5+10;
    const ll inf=1e15+10;
    int n,m;
    bool vis[N];
    ll a[N],b[N],link[N];
    inline const ll read(){
        register ll x=0;
        register char ch=getchar();
        while(ch<'0'||ch>'9') ch=getchar();
        while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        return x;
    }
    inline bool check(ll mid){
        for(ll i=1,j=1,rest,reach;i<=n;i++){
            if(a[i]-b[j]>mid) return 0;
            if(a[i]>b[j]){
                rest=mid-(a[i]-b[j]);
                reach=max(b[j]+rest,a[i]+rest/2);
            }
            else reach=a[i]+mid;
            while(b[j]<=reach&&j<=m) j++;
            if(j>m) return 1;
        }
        return 0;
    }
    int main(){
        freopen("read.in","r",stdin);
        freopen("read.out","w",stdout);
        n=read();m=read();
        for(int i=1;i<=n;i++) a[i]=read();
        for(int i=1;i<=m;i++) b[i]=read();
        ll l=0,r=inf,mid;
        while(l<r){
            mid=l+r>>1;
            if(check(mid)) r=mid;
            else l=mid+1;
        }
        printf(LL,l);
        return 0;
    }

     

    T3代码(暂缺)

     

  • 相关阅读:
    Ubuntu Server 18.04上安装fail2ban
    Spring Security实现用户名密码登录
    Spring Boot集成H2数据库
    2019年过去了,我很怀念它
    基于Spring Boot的统一异常处理设计
    Git推送到多个远程仓库
    广州商学院16级软工一班&二班-助教总结
    记一次返工之后记
    广州商学院16级软工一班&二班-第四次作业成绩
    广州商学院16级软工一班&二班-第三次作业成绩
  • 原文地址:https://www.cnblogs.com/shenben/p/5993350.html
Copyright © 2011-2022 走看看