网易雷火研发笔试 四题 (代码)
第一题:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<(1<<n);i++){
int cnt=0;
int x=i;
bool flag=false;
while(x>m){
if(x==2*m+1)flag=true;
x>>=1;cnt++;
}
if(x==m&&i!=m){
if(flag)cout<<i-(1<<cnt-1)<<endl;
else cout<<i+(1<<cnt-1)<<endl;
}
else cout<<i<<endl;
}
}
第二题:
#include<bits/stdc++.h>
using namespace std;
int n,k;
int g[1005];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>g[i];
int ans=0;
while(1){
sort(g+1,g+1+n);
int cnt=0;
for(int i=n;i>=1;i--){
if(g[i])g[i]--,cnt++;
if(cnt==k)break;
}
ans+=cnt==k;
if(cnt!=k)break;
}
cout<<ans<<endl;
}
第三题:
#include<bits/stdc++.h>
using namespace std;
int n;
int dp[1005][1005];
int main(){
cin>>n;
auto dfs=[&](auto&& dfs,int word,int cache,bool flag)->int{
if(word>=n)return 0;
if(dp[word][cache])return dp[word][cache];
int ans=n;
ans=min(ans,dfs(dfs,word+1,cache,0)+1);
if(cache)ans=min(ans,dfs(dfs,word+cache,cache,0)+2);
if(word&&!flag)ans=min(ans,dfs(dfs,word,word,1)+5);
return dp[word][cache]=ans;
};
cout<<dfs(dfs,0,0,0)<<endl;
}
第四题:
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[35][35];
int b[35][35];
int c[35];
char s[1000],q[1000];
bool del(){
bool flag=false;
for(int j=1;j<=n;j++)
for(int i=1;i<=m-2;i++)
if(a[i][j]&&a[i][j]==a[i+1][j]&&a[i+1][j]==a[i+2][j]){
b[i][j]=b[i+1][j]=b[i+2][j]=0;
flag=true;
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n-2;j++)
if(a[i][j]&&a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2]){
b[i][j]=b[i][j+1]=b[i][j+2]=0;
flag=true;
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
if(b[i][j]==0)a[i][j]=0;
b[i][j]=1;
}
return flag;
}
void fall(){
for(int j=1;j<=n;j++){
int index=0;
for(int i=m;i>=1;i--)
if(a[i][j])c[++index]=a[i][j];
for(int i=1;i<=index;i++)a[m-i+1][j]=c[i];
for(int i=index+1;i<=m;i++)a[m-i+1][j]=0;
}
}
void insertq(){
int index=0,len=strlen(q+1);
for(int i=m;i>=1;i--)
for(int j=1;j<=n;j++)
if(!a[i][j]&&index<len)
a[i][j]=q[++index]-'0';
}
int main(){
cin>>m>>n;
scanf("%s%s",s+1,q+1);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
a[i][j]=s[n*(i-1)+j]-'0',b[i][j]=1;
while(true){
bool flag=true;
while(del()){
flag=false;
fall();
}
if(flag)break;
insertq();
}
for(int i=1;i<=n;i++)printf("%d",a[1][i]);puts("");
}