2020牛客寒假算法基础集训营5【无C G】

题目来源:https://ac.nowcoder.com/acm/contest/3006#question
正常感受到了被模拟支配的恐惧,然后A了8题就跑路了,其实是不会写 名次是这五场以来最靠前的一次,奥利给!


A - 模板

这题差点让我形态崩了,我一开始题目看错了~~(我以为删除哪里都可以,结果只能删除末尾)~~ ,其实蛮简单的,多出来的加,等长的不一样就改

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
int f[N];
char s1[N],s2[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
LL qpow(LL x,LL p)
{
    LL res=1;
    while(p){
        if(p&1) res=res*x%mod;
        x=x*x%mod;
        p>>=1;
    }
    return res;
}
LL inv(LL x)
{
    return qpow(x,mod-2);
}
int main()
{
    r(n); r(m);
    scanf("%s",s1+1);
    scanf("%s",s2+1);
    int ans=0;
    FOR(i,1,min(n,m)){
        if(s1[i]!=s2[i]) ans++;
    }
    ans+=max(n,m)-min(n,m);
    cout<<ans<<endl;
    return 0;
}


B - 牛牛战队的比赛地

这题我想的比较复杂,就是先定一个左右的分界mm
然后左边的最大距离 与 右边最大距离 的比较分类讨论,特殊的是这个分界点的距离还大些的话 那就是这个分界点

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
int f[N];
int x[N],y[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
int main()
{
    r(n);
    int lb=100000,rb=-1000000;
    FOR(i,1,n){
        r(x[i]); r(y[i]);
        lb=min(x[i],lb);
        rb=max(x[i],rb);
    }
    int mm=(lb+rb)/2;
    double maxl=0,maxr=0,maxx=0;
    FOR(i,1,n){
        double dd=(x[i]-mm)*(x[i]-mm)+y[i]*y[i];
        if(x[i]<mm){
            if(maxl<dd) maxl=dd;
        }
        else if(x[i]>mm){
            if(maxr<dd) maxr=dd;
        }
        if(maxx<dd) maxx=dd;
    }
    if(maxl==maxr||(maxl<maxx&&maxr<maxx)){
        printf("%.7f\n",sqrt(maxx));
        return 0;
    }
    if(maxl>maxr){
        double l=-10000,r=mm;
        while(r-l>=eps){
            double mid=(l+r)/2;
            double ll=-1,rr=-1;
            FOR(i,1,n){
                double dd=(x[i]-mid)*(x[i]-mid)+y[i]*y[i];
                if(x[i]<mm){
                    if(dd>ll) ll=dd;
                }
                else{
                    if(dd>rr) rr=dd;
                }
            }
            //cout<<mid<<' '<<ll<<' '<<rr<<endl;
            if(ll>=rr){
                r=mid-eps;
            }
            else{
                l=mid+eps;
            }
        }
        double ans=-1;
        FOR(i,1,n){
            double dd=(x[i]-l)*(x[i]-l)+y[i]*y[i];
            if(ans<dd) ans=dd;
        }
        printf("%.7f\n",sqrt(ans));
    }
    else{
        double l=mm,r=10000;
        while(r-l>=eps){
            double mid=(l+r)/2;
            double ll=-1,rr=-1;
            FOR(i,1,n){
                double dd=(x[i]-mid)*(x[i]-mid)+y[i]*y[i];
                if(x[i]<=mm){
                    if(dd>ll) ll=dd;
                }
                else{
                    if(dd>rr) rr=dd;
                }
            }
            //cout<<mid<<' '<<ll<<' '<<rr<<endl;
            if(ll<=rr){
                l=mid+eps;
            }
            else{
                r=mid-eps;
            }
        }
        double ans=-1;
        FOR(i,1,n){
            double dd=(x[i]-l)*(x[i]-l)+y[i]*y[i];
            if(ans<dd) ans=dd;
        }
        printf("%.7f\n",sqrt(ans));
    }
    return 0;
}


C - C语言IDE


D - 牛牛与牛妹的约会

分了7种情况,最后一个else没写 白WA5发…

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-10;
const double pi=acos(-1);
double n,m;
int f[N];
int x[N],y[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
double ppow(double a){
    double l=1,r=a;
	while(r-l>=eps){
        double mid=(r+l)/2;
        if(mid*mid*mid>a){
            r=mid-eps;
        }
        else l=mid+eps;
	}
	return l;
}
int main()
{
    int t;
    r(t);
    while(t--){
        scanf("%lf%lf",&n,&m);
        double ans=0;
        if(n>m){
            if(n*m<0){//n>0 m<0
                double next=ppow(n);
                while(n-next>1){
                    //cout<<next<<endl;
                    ans+=1;
                    n=next;
                    next=ppow(n);
                }
                ans+=(n-m);
                printf("%.9f\n",ans);
            }
            else if(n<=0){//m<n<0
                ans=n-m;
                printf("%.9f\n",ans);
            }
            else if(n>0){
                double next=ppow(n);
                bool flag=1;
                while(n-next>1){
                    if(next>=m){
                       ans++;
                       n=next;
                       next=ppow(n);
                    }
                    else if(m-next+1<n-m){
                        ans++;
                        n=next;
                        next=ppow(n);
                        flag=0;
                        break;
                    }
                    else break;
                }
                if(flag) ans+=(n-m);
                else ans+=(m-n);
                printf("%.9f\n",ans);
            }
        }
        else if(n<m){
            if(n*m<0){//n<0 m>0
                double next=-ppow(-n);
                while(next-n>1){
                    ans++;
                    n=next;
                    next=-ppow(-n);
                }
                ans+=(m-n);
                printf("%.9f\n",ans);
            }
            else if(n>=0){//n>0 m>0
                ans=m-n;
                printf("%.9f\n",ans);
            }
            else if(n<0){//n<0 m<0
                double next=-ppow(-n);
                bool flag=1;
                while(next-n>1){
                    if(next<=m){
                       ans+=1;
                       n=next;
                       next=-ppow(-n);
                    }
                    else if(next-m+1<m-n){
                        ans+=1;
                        n=next;
                        next=-ppow(-n);
                        flag=0;
                        break;
                    }
                    else break;
                }
                //cout<<n<<' '<<m<<' '<<next<<endl;
                if(!flag) ans+=(n-m);
                else ans+=(m-n);
                printf("%.9f\n",ans);
            }
        }
        else{
            ans=0;
            printf("%.9f\n",ans);
        }
    }
    return 0;
}


E - Enjoy the game

找规律?反正我是找规律233

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
int f[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
LL qpow(LL x,LL p)
{
    LL res=1;
    while(p){
        if(p&1) res=res*x%mod;
        x=x*x%mod;
        p>>=1;
    }
    return res;
}
LL inv(LL x)
{
    return qpow(x,mod-2);
}
int main()
{
    r(n);
    LL now=1;
    FOR(i,1,62){
        now<<=1;
        if(now==n){
            cout<<"Alice\n";
            return 0;
        }
        else if(now>n) break;
    }
    cout<<"Bob\n";
    return 0;
}


F - 碎碎念

还是找规律…太菜了只会找规律

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=1000000007;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
LL dp[N];
LL sum[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
int main()
{
    r(n); r(m);
    FOR(i,0,n-1) dp[i]=1;
    dp[n]=2;
    FOR(i,n+1,200010) dp[i]=(dp[i-1]+dp[i-n-1])%mod;
    FOR(i,1,200010) sum[i]=(sum[i-1]+dp[i])%mod;
    while(m--){
        int a,b;
        r(a); r(b);
        cout<<(sum[b]-sum[a-1]+mod)%mod<<endl;
    }
    return 0;
}


G - 街机争霸


H - Hash

最小的满足的 就是当前的+mod 如果加爆了 输出-1 (爆了是指超过了zzzzzz的哈希值)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
char str[M];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
int main()
{
    while(~scanf("%s",str+1)){
 
     r(m);
    LL now=0;
    LL tmp=1;
    LL maxx=0;
    for(int i=6;i>=1;i--){
        now+=tmp*(str[i]-'a');
        maxx+=tmp*25;
        tmp*=26;
    }
    now+=m;
    //cout<<now<<endl;
    if(now>maxx) cout<<-1<<endl;
    else{
        stack<char> s;
        while(now){
            //cout<<now<<endl;
            s.push(now%26+'a');
            now/=26;
        }
        if(s.size()==5) s.push('a');
        while(s.size()){
            cout<<s.top();
            s.pop();
        }
        cout<<endl;
    }
    }
    return 0;
}

I - I题是个签到题

真*签到题

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
int f[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
LL qpow(LL x,LL p)
{
    LL res=1;
    while(p){
        if(p&1) res=res*x%mod;
        x=x*x%mod;
        p>>=1;
    }
    return res;
}
LL inv(LL x)
{
    return qpow(x,mod-2);
}
int main()
{
    r(n); r(m);
    FOR(i,1,n) r(f[i]);
    int cnt=0;
    FOR(i,1,n){
        if(i!=9&&f[i]>f[9]) cnt++;
    }
    if(f[9]*1.0>=m*0.8||cnt<=2) cout<<"Yes\n";
    else cout<<"No\n";
    return 0;
}


J - 牛牛战队的秀场

简单的数学,注意精度

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
#define ls k<<1,l,mid
#define rs k<<1|1,mid+1,r
#define mp(x,y) make_pair(x,y)
#define r(x) read(x)
#define rrr(x,y,z) read(x);read(y);read(z)
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
typedef long long LL;
typedef pair<int,int> pt;
const int N=1e6+5;
const int M=2e3+5;
const int INF=0x7fffffff;
const int mod=998244353;
const double eps=1e-8;
const double pi=acos(-1);
LL n,m;
int f[N];
template<class T>
inline void read(T &x)
{
    char c; x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    T res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    x*=res;
}
LL qpow(LL x,LL p)
{
    LL res=1;
    while(p){
        if(p&1) res=res*x%mod;
        x=x*x%mod;
        p>>=1;
    }
    return res;
}
LL inv(LL x)
{
    return qpow(x,mod-2);
}
int main()
{
    int a,b;
    r(n); rrr(m,a,b);
    double oo=pi*1.0/n;
    double l=2*m*sin(oo);
    double dis=abs(a-b);
    if(dis>n/2) dis=n-dis;
    printf("%.6f\n",dis*l);
    return 0;
}


发布了71 篇原创文章 · 获赞 89 · 访问量 8525

猜你喜欢

转载自blog.csdn.net/weixin_43890662/article/details/104299846