字节跳动青训营每日一练编程题
Posted yeah17981
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节跳动青训营每日一练编程题相关的知识,希望对你有一定的参考价值。
1:实现一个 36 进制的加法 0-9 a-z。
#include<bits/stdc++.h>
typedef long long ll;
const ll N=2e5+10;
using namespace std;
int s[N];
int main()
int _;
string a,b;
while(cin>>a>>b)
string ans;
int pos;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
for(int i=0;i<max(a.size(),b.size());i++)
int x;
x=pos;
char q;
if(a[i]>='a'&&a[i]<='z')
x=a[i]-'a'+10;
if(a[i]>='0'&&a[i]<='9')
x=a[i]-'0';
if(b[i]>='a'&&b[i]<='z')
x+=b[i]-'a'+10;
if(b[i]>='0'&&b[i]<='9')
x+=b[i]-'0';
if(x>=36)
x-=36;
pos=1;
else pos=0;
if(x>=10)
q='a'+x-10;
ans+=q;
else
q='0'+x;
ans+=q;
if(pos!=0) ans+='1';
reverse(ans.begin(), ans.end());
cout<<ans<<"\\n";
2、抖音电影票业务支持电影院选座,需要在用户买票时自动推荐座位,如果一个用户买了多张票,则需要推荐相邻(上下相邻、左右相邻都可)的座位。现在使用一个二维数组来表示电影院的座位,数组中 0 表示未被选座,1 表示已被选座或者为障碍物,请实现一个方法求出给定影院中最大可推荐的相邻座位个数。
没调试
#include<bits/stdc++.h>
typedef long long ll;
const ll N=2e2+10;
using namespace std;
int a[N][N];//不写输入了
int fa[N*N];
int sum[N*N];
int n;
int find(int x)
if(x == fa[x]) return fa[x];
return fa[x] = find(fa[x]);
void add(int a,int b)
if(find(a)!=find(b))
fa[find(a)] = find(b);
sum[b]=sum[a]+sum[b];
return ;
int main()
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
fa[(i-1)*n+j]=(i-1)*n+j;
a[i][j]=1-a[i][j];
if(a[i][j]==1) sum[(i-1)*n+j]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==1)
if(a[i-1][j]==1) add((i-1)*n+j,(i-2)*n+j);
if(a[i+1][j]==1) add((i-1)*n+j,(i)*n+j);
if(a[i][j-1]==1) add((i-1)*n+j,(i-1)*n+j-1);
if(a[i][j+1]==1) add((i-1)*n+j,(i-2)*n+j+1);
int maxx=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
maxx=max(maxx,sum[(i-1)*n+j]);
cout<<maxx<<"\\n";
3、有效 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是无效 IP 地址。
给定一个字符串 s,非数字的字符可替换为任意不包含在本字符串的数字,同样的字符只能替换为同样的数字,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你不能重新排序或删除 s 中的任何数字,你可以按任何顺序返回答案。
#include<bits/stdc++.h>
typedef long long ll;
const ll N=2e2+10;
using namespace std;
void helper(string s, int n, string out, vector<string>& res)
if (n == 4)
if (s.empty()) res.push_back(out);
else
for (int k = 1; k < 4; ++k)
if (s.size() < k) break;
int val = atoi(s.substr(0, k).c_str());
if (val > 255 || k != to_string(val).size()) continue;
helper(s.substr(k), n + 1, out + s.substr(0, k) + (n == 3 ? "" : "."), res);
void check(string s)
vector<string> res;
string out;
helper(s,0,out,res);
for (int i = 0; i < res.size(); i++)
cout << res[i] << endl;
map<char,int>mp;
set<string> st;
int pos[10];
void find(string s,int x)
for(int i=x;i<s.size();i++)
if(s[i]>='a'&&s[i]<='z')
char a=s[i];
if(mp[s[i]]==0)
for(int j=0;j<=9;j++)
if(pos[j]!=0) continue;
mp[a]=j+1;
pos[j]=1;
// cout<<a<<" "<<mp[s[i]]<<" ";
s[i]=j+'0';
if(i==s.size()-1)
st.insert(s);
cout<<s;
else
find(s,i+1);
s[i]=a;
pos[j]=0;
mp[a]=0;
else
s[i]=mp[s[i]]+'0'-1;
if(i==s.size()-1)
st.insert(s);
cout<<s;
else
find(s,i+1);
s[i]=a;
//s[i]=a;
//cout<<s[i]<<" "<<mp[s[i]]<<" ";
//cout<<s<<"\\n";
st.insert(s);
return ;
int main()
string s;
cin>>s;
for(int i=0;i<=s.size();i++)
if(s[i]>='0'&&s[i]<='9')
pos[s[i]-'0']=1;
find(s,0);
for(set<string>::iterator i=st.begin();i!=st.end();i++)
check(*i);
以上是关于字节跳动青训营每日一练编程题的主要内容,如果未能解决你的问题,请参考以下文章