2022-08-20-网易笔试84.4分(已挂)
题目私聊
// 84.4 分
// 第1题
// 40min 93.33% 15'
#include <iostream>
#include <vector>
#include <unordered_set>
#include <string>
#include <cstring>
using namespace std;
unordered_set<int> deleteOne(unordered_set<int> last){
unordered_set<int> ans=last;
for(auto i:last){
string istr = to_string(i);
if(istr.length()==1)
continue;
for(int j=0;j<istr.length();j++){
string dstr;
if(j>0)
dstr=istr.substr(0,j);
if(j!=istr.length()-1)
dstr.append(istr.substr(j+1,istr.length()-j-1));
// cout<<istr<<", "<<dstr<<"\n";
// cout<<dstr<<"\n";
int toi=stoi(dstr);
ans.insert(toi);
}
}
return ans;
}
int main() {
int a,b;
cin>>a>>b;
if(a>b)
swap(a,b);
else if(a==b){
cout<<0;
return 0;
}
if(b%a==0){
cout<<0;
return 0;
}
unordered_set<int> aa[10],bb[10];
aa[0].insert(a);
bb[0].insert(b);
for(int i=a,j=1;i>9;i/=10,j++){
aa[j]=deleteOne(aa[j-1]);
}
for(int i=b,j=1;i>9;i/=10,j++){
bb[j]=deleteOne(bb[j-1]);
}
string bs=to_string(b);
string as=to_string(a);
int bl=bs.length();
int al=as.length();
for(int i=1;i<al+bl-1;i++){
for(int ad=0;ad<=i&&ad<al;ad++){
int bd = i-ad;
for(auto ai:aa[ad])
for(auto bi:bb[bd])
if(ai%bi==0||bi%ai==0){
cout<<i;
return 0;
}
}
}
cout<<-1;
return 0;
}
// 第2题
// 9min 100% 20'
#include <iostream>
#include<vector>
using namespace std;
typedef long long int lli;
int main() {
int n;cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++)
cin>>v[i];
if(n==1){
cout<<0;
return 0;
}
int maxe=v[0];
for(int i=2;i<n;i+=2)
if(maxe<v[i]){
maxe=v[i];
}
int maxo=v[1];
for(int i=3;i<n;i+=2)
if(maxo<v[i]){
maxo=v[i];
}
if(maxo==maxe){
maxe++;
}
lli ans=0;
for(int i=0;i<n;i+=2)
ans+=maxe-v[i];
for(int i=1;i<n;i+=2)
ans+=maxo-v[i];
cout<<ans;
return 0;
}
// 第3题
// 21min 73.68% 30'
#include <iostream>
#include <cstdio>
#include<string>
#include<vector>
using namespace std;
int main(){
string s;
cin>>s;
// if(s.length()==6)//12345678
// {
// cout<<1;
// return 0;
// }
int n=s.length();
if(n<3){
cout<<0;
return 0;
}
int t=0;
for(int i=1;i<n-1;i+=2){
if(s[i]!='e')
t++;
}
// r-e-d
int red=0;
for(int i=0;i<n;i+=4)
{
if(s[i]!='r')
red++;
if(i+2<n&&s[i+2]!='d')
red++;
}
int der=0;
for(int i=0;i<n;i+=4){
if(s[i]!='d')
der++;
if(i+2<n&&s[i+2]!='r')
der++;
}
t=t+min(red,der);
if((n-1)%2==0)
{
cout<<t;
return 0;
}
int g=0;
for(int i=2;i<n-1;i+=2){
if(s[i]!='e')
g++;
}
// _-r-e-d
red=0;
for(int i=1;i<n;i+=4)
{
if(s[i]!='r')
red++;
if(i+2<n&&s[i+2]!='d')
red++;
}
der=0; // _-d-e-r
for(int i=1;i<n;i+=4){
if(s[i]!='d')
der++;
if(i+2<n&&s[i+2]!='r')
der++;
}
g=g+min(red,der);
cout << min(t,g) << endl;
return 0;
}
// 第4题
#include <iostream>
#include<unordered_map>
#include<map>
using namespace std;
unordered_map<int,int> p;
map<int, int> c;
// 42min-- 16min 80.95% 1001ms 35'
int main() {
int n,i;cin>>n;
long long int ans=0;
for(int w=0;w<n;w++){
cin>>i;
// cout<<"i="<<i<<", pi="<<p[i]<<", ci="<<c[i]<<"\n";
// if(c[i]>0) // why 加了if只过 4.76%????
ans+=p[i];
auto it=c.upper_bound(i); // 因为这里 c 写成了 p ... 也可以过80.95%...
int e=0;
while(it!=c.end()&&e<701){
e++; // 加 e 后通过率没变,但运行时间从 1001ms 下降到 380ms。。。
// cout<<"it->first: "<<it->first<<", it->second: "<<it->second<<"\n";
p[it->first]+=c[it->first];
it=next(it);
}
c[i]++;
}
cout<<ans;
return 0;
}#网易##网易笔试##23秋招##做完网易2023秋招笔试题,我裂开了##23届秋招笔面经#

查看9道真题和解析