首页 > 京东8.21笔试
头像
ren201903072124505
发布于 2021-08-21 21:57
+ 关注

京东8.21笔试

#京东笔试# 
    一直在研究01,邻居都没做。。。
    虽然凉了,但是不知道做的对不对就难受,有没有人看看这两个程序对不对
邻居:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    int N;
    cin>>N;
    vector<vector<int>> a(N,vector<int>(2));
    for(int i=0;i<N;i++){
        cin>>a[i][0]>>a[i][1];
    }
    
    int ans=0;
    vector<vector<int>> b;
    for(int i=0;i<N;i++){
        if(!b.size()){
            b.push_back(a[i]);                             
        }else{
            for(int j=0;j<b.size();j++){
                if(a[i][0]-b[j][0]==a[i][1]-b[j][1]){   //匹配已有模式
                    ans++;
                    break;
                }
            }
            b.push_back(a[i]);            //压入新模式
        }
    }
    /*
    sort(a.begin(),a.end());
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            if(a[i][0]-a[j][0]==a[i][1]-a[j][1]){
                ans++;
            }
        }
    }
    */
    cout<<ans<<endl;
    return 0;
}




01:
a:b=c:d 则a:b=(a+c):(b+d) 如果串a可划分为某子串b,那么所有划分位置b 2b 3b都符合01比例
#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main(){
    int n;
    string str;
    cin>>n;
    cin>>str;
    vector<int>ans(n,1);
    string s="";
    vector<int>n0(n,0);
    vector<int>n1(n,0);
    if(str[0]=='0'){
        n0[0]=1;
    }else{
        n1[0]=1;
    }
    int ma,mi;
    for(int i=1;i<n;i++){
        if(str[i]=='0'){
            n0[i]=n0[i-1]+1;
            n1[i]=n1[i-1];
        }
        if(str[i]=='1'){
            n1[i]=n1[i-1]+1;
            n0[i]=n0[i-1];
        }

        if(n0[i]>1&&n1[i]>1){
            ma=n0[i]>=n1[i]?n0[i]:n1[i];
            mi=n0[i]>=n1[i]?n1[i]:n0[i];
            int k=0;
            for(int i=mi;i>1;i--){
                if(ma%i==0&&mi%i==0){
                    k=i;                             //当前位置0 1数量的最大公约数,作为划分的次数
                }
            }
            if(k==0)
                continue;
            int l=(i+1)/k;
            int flag=1;
            for(int p=1;p<l&&i-p*l>=0;p++){
                cout<<i<<" "<<i-p*l<<endl;
                if(n0[i]*n1[i-p*l]!=n1[i]*n0[i-p*l]){  //匹配每次划分处的01之比
                    flag=0;
                    break;
                }
            }
            if(flag){
                ans[i]=k;
            }
        }
        else if(n0[i]==0){
            ans[i]=n1[i];
        }else if(n1[i]==0){
            ans[i]=n0[i];
        }
    }
    for(int i=0;i<n-1;i++){
        cout<<ans[i]<<" ";
    }
    cout<<ans[n-1]<<endl;
    return 0;
}




全部评论

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

相关热帖

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

热门推荐