AlenaNuna

导航

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

posted on 2024-09-08 23:56  AlenaNuna  阅读(10)  评论(0编辑  收藏  举报