首页 > 4.12字节笔试
头像
Xzavieru
编辑于 2020-04-12 22:38
+ 关注

4.12字节笔试

//第一题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int a[maxn],b[maxn];

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        bool flag=1;
        int ans=0;
        for(int i=1;i<=n;++i)cin>>a[i];
        for(int i=1;i<=n;++i)cin>>b[i];
        int id=-1;
        for(int i=1;i<=n;++i){
            if(a[i]!=b[i]){
                if(a[i]>b[i])flag=0;
                else ans=b[i]-a[i];
                id=i;
                break;
            }
        }
        for(int i=id+1;i<=n;++i){
            if(a[i]+ans!=b[i]){
                for(int j=i;j<=n;j++)if(a[j]!=b[j])flag=0;
                break;
            }
        }
        if(!flag)puts("NO");
        else puts("YES");
    }
    return 0;
}
第二题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int val[maxn],res1[maxn],res2[maxn];
int arr[maxn];
int main() {
    int n;
    cin>>n;
    for(int i=0;i<n;++i)cin>>val[i];
    long long int ans=0;
    for(int i=n-2;i>=0;--i){
        if(val[i+1]>=val[i])continue;;
        int t = (val[i]-1)/val[i+1];
        ans+=t;
        val[i]/=(t+1);
    }
    cout<<ans;
    return 0;
}
第三题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;

int a[maxn],b[maxn];
int n,m;
int fin(int x){
    int l = 0,r = n+1;
    for(int i=0;i<50;++i){
        int mid=(l+r)/2;
        if(a[mid]>x)r=mid;
        else l=mid;
    }
    return l;
}
int main() {
  //  int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;++i)scanf("%d",&a[i]);
    for(int i=1;i<=m;++i)scanf("%d",&b[i]);
    sort(a+1,a+1+n);
    sort(b+1,b+1+m);
    long long int  ans(0);
    for(int i=1;i<=m;++i){
        int id = fin(b[i]);
        ans+=b[i]-a[id];
    }
    cout<<ans;
    return 0;
}

第四题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int val[maxn],res[maxn],res2[maxn];
int arr[maxn];
pair<int,int>skt[maxn];
int main() {
    int t;
    cin>>t;
    while(t--){
      int n;cin>>n;
      for(int i=1;i<=n;++i)cin>>val[i];
      int top=0;
      for(int i=1;i<=n;++i){
        while(top&&skt[top].first<=val[i])--top;
        if(top){
             res[i]=i-skt[top].second-1;
        }
        else {
            res[i]=i-1;
        }
        ++top;
        skt[top]=make_pair(val[i],i);
      }
      for(int i=1;i<=n;i++)skt[i].first=skt[i].second=0;
      top=0;
      for(int i=n;i>=1;--i){
        while(top&&skt[top].first<=val[i])--top;
        if(top){
            res[i]+=skt[top].second-i-1;
        }
        else res[i]+=(n-i);
        skt[++top]=make_pair(val[i],i);
      }
      for(int i=1;i<=n;i++)cout<<res[i]<<' ';
      puts("");
    }
    return 0;
}




全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐