HJ31~HJ40 华为机试题库
HJ31 单词倒排
题目:https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836?tpId=37&tqId=38366&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s[10010]; 4 char c; 5 int cnt=0; 6 bool DX(char c){ 7 if(c>='A'&&c<='Z')return 1; 8 return 0; 9 } 10 bool XX(char c){ 11 if(c>='a'&&c<='z')return 1; 12 return 0; 13 } 14 void init(){ 15 c=getchar(); 16 while(c!='\n'){ 17 while(!DX(c)&&!XX(c))c=getchar(); 18 cnt++; 19 while(DX(c)||XX(c)){ 20 s[cnt]+=c; 21 c=getchar(); 22 } 23 } 24 return; 25 } 26 void Output(){ 27 for(int i=cnt;i>=1;i--) 28 cout<<s[i]<<" "; 29 return; 30 } 31 int main(){ 32 init(); 33 Output(); 34 return 0; 35 }
HJ32 密码截取
题目:https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
题目范围n才2500,随便什么暴力都能做。(谢谢华为,你真善良)(如果是pdd你就等着写manacher吧)但是我顺便拿来当manacher模板题了。manacher效率是O(n)的。
这道题作为manacher模板题单独发了一篇博客。里面详细讲解了manacher算法。传送门:Manacher算法讲解||HJ32 密码截取
1 #include<bits/stdc++.h> 2 using namespace std; 3 string Preprocess(const string&s){ 4 string t; 5 if(s.empty()){ 6 t="^$"; 7 return t; 8 } 9 t="^"; 10 int n=s.size(); 11 for(int i=0;i<n;i++) 12 t=t+'#'+s[i]; 13 t=t+"#$"; 14 return t; 15 } 16 int Manacher(const string&t){ 17 int n=t.size(); 18 vector<int>p(n,0); 19 int R=0,C=0; 20 for(int i=1;i<n;i++){ 21 int mirr=C*2-i;//mirror 22 if(R>i) p[i]=min(R-i,p[mirr]); 23 while(t[i+p[i]+1]==t[i-p[i]-1]) p[i]++; 24 if(i+p[i]>R){ 25 R=i+p[i]; 26 C=i; 27 } 28 } 29 int ans=0; 30 for(int i=1;i<n;i++) ans=max(ans,p[i]); 31 return ans; 32 } 33 int main(){ 34 string s,t; 35 cin>>s; 36 t=Preprocess(s); 37 cout<<Manacher(t); 38 return 0; 39 }
HJ33 整数与IP地址间的转换
题目:https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea?tpId=37&tqId=21256&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 int main(){ 5 string s; cin>>s; 6 ll n; cin>>n; 7 ll sum=0; 8 for(int i=1;i<=4;i++){ 9 string sub=s.substr(0,s.find('.')); 10 int t=stoi(sub); 11 sum=(sum<<8)+t; 12 s.erase(0,s.find('.')+1); 13 } 14 cout<<sum<<endl; 15 int cnt=0,ans[5]; 16 for(int i=1;i<=4;i++){ 17 ans[++cnt]=n&((1<<8)-1); 18 n>>=8; 19 } 20 for(int i=cnt;i>1;i--)cout<<ans[i]<<"."; 21 cout<<ans[1]; 22 }
HJ34 图片整理
题目:https://www.nowcoder.com/practice/2de4127fda5e46858aa85d254af43941?tpId=37&tqId=21257&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 string s;cin>>s; 5 sort(s.begin(),s.end()); 6 cout<<s; 7 }
HJ35 蛇形矩阵
题目:https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e?tpId=37&tqId=21258&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n,cnt=0; 5 cin>>n; 6 vector<vector<int> >arr(n+1,vector<int>(n+1)); 7 for(int i=1;i<=n;i++){ 8 int x=i,y=1; 9 for(;y<=i;y++,x--) 10 arr[x][y]=++cnt; 11 } 12 for(int i=1;i<=n;i++){ 13 for(int j=1;j<=n-i+1;j++) 14 cout<<arr[i][j]<<" "; 15 cout<<'\n'; 16 } 17 }
HJ36 字符串加密
题目:https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3?tpId=37&tqId=21259&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 char key[110],mp[300]; 4 bool book[300]; 5 int main(){ 6 cin>>key; 7 int l=strlen(key),now; 8 now='a'; 9 for(int i=0;i<l;i++){ 10 if(book[(int)key[i]]==0){ 11 book[(int)key[i]]=1; 12 mp[now]=key[i]; 13 now++; 14 } 15 } 16 int cnt=0; 17 for(int c='a';c<='z';c++){ 18 if(book[c]==0)mp[now++]=c,cnt++; 19 } 20 string s; 21 cin>>s; 22 for(auto i:s){ 23 cout<<mp[i]; 24 } 25 }
HJ37 统计每个月兔子的总数
题目:https://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395?tpId=37&tqId=21260&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
就是硬模拟,sum[i]表示第i天的总数,lao[i]表示截至第i天的老兔子数,cha1[i]表示差一个月成年的兔子数,cha2[i]表示差2个月成年的兔子数。
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long sum[32],cha1[32],cha2[32],lao[32]; 4 int main(){ 5 int n; 6 cin>>n; 7 sum[1]=sum[2]=1; 8 cha2[1]=1; 9 cha1[2]=1; 10 for(int i=3;i<=n;i++){ 11 lao[i]=lao[i-1]+cha1[i-1]; 12 cha1[i]=cha2[i-1]; 13 cha2[i]=lao[i]; 14 sum[i]=lao[i]+cha1[i]+cha2[i]; 15 } 16 cout<<sum[n]; 17 }
HJ38 求小球落地5次后所经历的路程和第5次反弹的高度
https://www.nowcoder.com/practice/2f6f9339d151410583459847ecc98446?tpId=37&tqId=21261&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 void Work(int n){ 4 double h=n,sum=h; 5 for(int i=1;i<=5;i++){ 6 h/=2; 7 if(i!=5)sum+=2*h; 8 } 9 cout<<sum<<endl<<h; 10 } 11 int main(){ 12 int n;cin>>n; 13 Work(n); 14 }
HJ39 判断两个IP是否属于同一子网
https://www.nowcoder.com/practice/34a597ee15eb4fa2b956f4c595f03218?tpId=37&tqId=21262&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 char s[3][20]; 4 int num[3][10],cnt[3]; 5 void init(){ 6 for(int i=0;i<3;i++) 7 scanf("%s",s[i]); 8 return; 9 } 10 int Work(int a,int b){ 11 int x=0,i=a,j=b,f=1; 12 while(s[i][j]<'0'||s[i][j]>'9'){ 13 if(s[i][j]=='-')f=-1; 14 j++; 15 } 16 while(s[i][j]>='0'&&s[i][j]<='9'){ 17 x=x*10+s[i][j]-'0'; 18 j++; 19 } 20 return f*x; 21 } 22 void GetNum(){ 23 for(int i=0;i<3;i++){ 24 int l=strlen(s[i]); 25 for(int j=0;j<l;j++) 26 if(s[i][j]=='-'||(s[i][j]>='0'&&s[i][j]<='9')){ 27 if(j==0||(s[i][j-1]<'0'||s[i][j-1]>'9')){ 28 // printf("!%c",s[i][j]); 29 num[i][++cnt[i]]=Work(i,j); 30 // printf("%d ",num[i][cnt[i]]); 31 } 32 } 33 } 34 return; 35 } 36 bool Check3(){ 37 int e[40],cnt=0; 38 for(int i=1;i<=4;i++){ 39 for(int j=7;j>=0;j--){ 40 int t=1<<j; 41 cnt++; 42 if(t&num[0][i]) e[cnt]=1; 43 else e[cnt]=0; 44 } 45 } 46 if(e[1]==0||e[cnt]==1)return 0; 47 for(int i=2;i<=cnt;i++) 48 if(e[i]==1&&e[i-1]==0)return 0; 49 return 1; 50 } 51 bool Check(){ 52 for(int i=0;i<3;i++) 53 if(cnt[i]!=4)return 0; 54 for(int i=0;i<3;i++) 55 for(int j=1;j<=4;j++) 56 if(num[i][j]<0||num[i][j]>255)return 0; 57 if(!Check3())return 0; 58 return 1; 59 } 60 bool CheckZW(){ 61 for(int i=1;i<=4;i++){ 62 int a=num[1][i]&num[0][i]; 63 int b=num[2][i]&num[0][i]; 64 // printf("%d %d\n",a,b); 65 if(a!=b)return 0; 66 } 67 return 1; 68 } 69 int main(){ 70 init(); 71 // puts("OK"); 72 GetNum(); 73 if(!Check()){ 74 puts("1"); 75 return 0; 76 } 77 if(CheckZW()){ 78 puts("0"); 79 } 80 else puts("2"); 81 return 0; 82 }
HJ40 统计字符
https://www.nowcoder.com/practice/539054b4c33b4776bc350155f7abd8f5?tpId=37&tqId=21263&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 string s; 5 getline(cin,s); 6 int zm=0,kg=0,sz=0,qt=0; 7 for(auto&i:s){ 8 if((i>='a'&&i<='z')||(i>='A'&&i<='Z'))zm++; 9 else if(i==' ')kg++; 10 else if(i>='0'&&i<='9')sz++; 11 else qt++; 12 } 13 cout<<zm<<'\n'<<kg<<'\n'<<sz<<'\n'<<qt; 14 }
string s;getline(cin,s);
by:AlenaNuna