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 场周赛完结的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 31 场周赛完结

Acwing第 36 场周赛完结

Acwing第 56 场周赛完结

Acwing第 32 场周赛完结

Acwing第 59 场周赛完结

Acwing第 35 场周赛完结