当前位置: 首页 > 面试经验 >

网易2022-8-20算法岗笔试AK代码

优质
小牛编辑
108浏览
2023-03-28

网易2022-8-20算法岗笔试AK代码

// A题
#include <bits/stdc++.h>

using namespace std;

const int N=1200;
int a[N],pos[N];
int main(){
    freopen("1.in","r",stdin);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        pos[a[i]]=i;
    }
    int ans=0;
    vector<pair<int,int> >res;
    for(int i=1;i<=n;i++){
        while(a[i]!=i){
            res.push_back(make_pair(i,pos[a[i]-1]));
            int tmp=pos[a[i]-1];
            pos[a[i]]=tmp;
            swap(a[i],a[pos[a[i]-1]]);
            pos[a[i]]=i;
            ans++;
        }
    }
    printf("%d\n",ans);
    for(auto&it:res){
        printf("%d %d\n",it.first, it.second);
    }
    return 0;
}
// B题
#include <bits/stdc++.h>


using namespace std;

char s[300005];
int num[30];
unordered_map<long long,int>mp;
long long change(int x,int y){
    return 1LL*(x+200006)*500000+(y+200006);
}
int main(){
    // freopen("1.in","r",stdin);
    scanf("%s",s+1);
    int n=strlen(s+1);
    long long res=0;
    mp[change(0,0)]++;
    for(int i=1;i<=n;i++){
        if(s[i]=='r') num[1]++;
        else if(s[i]=='e') num[2]++;
        else if(s[i]=='d') num[3]++;
        res+=1LL*mp[change(num[1]-num[2],num[2]-num[3])];
        mp[change(num[1]-num[2],num[2]-num[3])]++;
    }
    printf("%lld\n",res);
    return 0;
}

// C题
#include <bits/stdc++.h>


using namespace std;

const int N=1e5+7;
int pos[N][35];
bool vis[N];
int a[N];
int main(){
    // freopen("1.in","r",stdin);
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++){
        int tmp=a[i];
        for(int j=33;j>=1;j--){
            if(tmp%2==1) pos[i][j]=1;
            else pos[i][j]=0;
            tmp/=2;
        }
    }
    int res=0;
    for(int j=1;j<=33;j++){
        int tmp=0;
        res*=2;
        for(int i=1;i<=n;i++){
            if(vis[i]) continue;
            if(pos[i][j]) tmp++;
        }
        if(tmp>=k){
            res++;
            for(int i=1;i<=n;i++){
                if(vis[i]) continue;
                if(pos[i][j]==0) vis[i]=true;
            }
        }
    }
    printf("%d\n",res);
    return 0;
}

//D 题
#include <bits/stdc++.h>


using namespace std;

long long a[4][4];
long long p[4][4];
long long res[4][4];
long long mod=1e9+6;
long long MOD=1e9+7;
void mul_1(){
    for(int i=1;i<=2;i++){
        for(int j=1;j<=2;j++){
            res[i][j]=0;
            for(int k=1;k<=2;k++){
                res[i][j]=(res[i][j]+p[i][k]*p[k][j]%mod)%mod;
            }
        }
    }
    for(int i=1;i<=2;i++){
        for(int j=1;j<=2;j++) p[i][j]=res[i][j];
    }
}
void mul_2(){
    for(int i=1;i<=2;i++){
        for(int j=1;j<=2;j++){
            res[i][j]=0;
            for(int k=1;k<=2;k++){
                res[i][j]=(res[i][j]+p[i][k]*a[k][j]%mod)%mod;
            }
        }
    }
    for(int i=1;i<=2;i++){
        for(int j=1;j<=2;j++) a[i][j]=res[i][j];
    }
}
void pow_(long long k){
    while(k){
        if(k%2==1){
            mul_2();
            k--;
        }
        else{
            mul_1();
            k/=2;
        }
    }
}
long long POW(long long x, long long y){
    long long res=1;
    x%=MOD;
    while(y){
        if(y%2==1){
            res=res*x%MOD;
            y--;
        }
        else{
            x=x*x%MOD;
            y/=2;
        }
    }
    return res;
}
int main(){
    // freopen("1.in","r",stdin);
    long long n,m,k;
    scanf("%lld%lld%lld",&n,&m,&k);
    if(k==1){
        printf("%lld\n",n%MOD);
        return 0;
    }
    else if(k==2){
        printf("%lld\n",m%MOD);
        return 0;
    }
    a[1][1]=0;
    a[2][1]=1;
    p[1][1]=p[1][2]=2;
    p[2][1]=1;
    p[2][2]=0;
    pow_(k-2);
    long long res1=a[1][1];
    a[1][1]=1;
    a[2][1]=0;
    a[1][2]=0;
    a[2][2]=0;
    p[1][1]=p[1][2]=2;
    p[2][1]=1;
    p[2][2]=0;
    pow_(k-2);
    long long res2=a[1][1];
    long long ans=POW(n,res1)*POW(m,res2)%MOD;
    printf("%lld\n",ans);
    // cout<<n<<' '<<m<<' '<<k<<endl;
    return 0;
}


#网易笔试#
 类似资料: