Acwing第 41 场周赛完结
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing第 41 场周赛完结相关的知识,希望对你有一定的参考价值。
T3罚时爆炸
目录
4308. 组合字符串【暴力】
#include<bits/stdc++.h>
using namespace std;
int main(void)
string s1,s2,ans;
cin>>s1>>s2;
for(int len1=1;len1<=s1.size();len1++)
string temp1=s1.substr(0,len1);
for(int len2=1;len2<=s2.size();len2++)
string temp2=s2.substr(0,len2);
string temp=temp1+temp2;
if(!ans.size()) ans=temp;
else ans=min(ans,temp);
cout<<ans;
return 0;
309. 消灭老鼠【斜率】
我们将(x,y)
看成原点,然后求不同的斜率的个数即可。
#include<bits/stdc++.h>
using namespace std;
int n,x,y;
int gcd(int a,int b)return b?gcd(b,a%b):a;
map<pair<int,int>,int>mp;
int main(void)
cin>>n>>x>>y;
for(int i=0;i<n;i++)
int l,r; cin>>l>>r;
l-=x,r-=y;
int temp=gcd(l,r);
mp[l/temp,r/temp]++;
cout<<mp.size();
return 0;
4310. 树的DFS【DFS】
你会发现一棵树它的所有的儿子都是和它挨着的。
故我们直接dfs一下,过程中记录每一个点作为根有几个结点。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
vector<int>ve[N],path;
map<int,int>mp;
int st[N],n,q,x;
int dfs(int u)
path.push_back(u);
int sum=1;
for(int i=0;i<ve[u].size();i++) sum+=dfs(ve[u][i]);
st[u]=sum;
return sum;
int main(void)
scanf("%d%d",&n,&q);
for(int i=2;i<=n;i++) scanf("%d",&x),ve[x].push_back(i);
dfs(1);
for(int i=0;i<path.size();i++) mp[path[i]]=i;
while(q--)
int u,k; scanf("%d%d",&u,&k);
if(k>st[u]) puts("-1");//k大于以u为根的结点数
else printf("%d\\n",path[mp[u]+k-1]);
return 0;
以上是关于Acwing第 41 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章