Codeforces Beta Round #14 (Div. 2)未完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Beta Round #14 (Div. 2)未完结相关的知识,希望对你有一定的参考价值。

2022.3.8
题单地址:https://codeforces.com/contest/14

目录

A. Letter


求一下左上角的下标,和右下角的下标就好了。

#include<bits/stdc++.h>
using namespace std;
int n,m;
string s[10005];
int main(void)

    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>s[i];
    int x=1e9,y=1e9,xx=0,yy=0;
    for(int i=0;i<n;i++)
    
        for(int j=0;j<m;j++)
        
            if(s[i][j]=='*')
            
                x=min(x,i),y=min(y,j);
                xx=max(xx,i),yy=max(yy,j);
            
        
    
    for(int i=x;i<=xx;i++)
    
        for(int j=y;j<=yy;j++) cout<<s[i][j];
        cout<<endl;
    
    return 0;

B. Young Photographer【差分】


找共同覆盖的部分

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N],n,m;
int main(void)

    cin>>n>>m;
    for(int i=0;i<n;i++)
    
        int l,r; cin>>l>>r;
        if(l>r) swap(l,r);
        a[l]++,a[r+1]--;
    
    for(int i=1;i<N;i++) a[i]+=a[i-1];
    int ans=1e9;
    for(int i=0;i<N;i++)
    
        if(a[i]==n) ans=min(ans,abs(i-m));
    
    if(ans==1e9) puts("-1");
    else cout<<ans;
    return 0;

C. Four Segments【模拟】

#include<bits/stdc++.h>
using namespace std;
struct nodeint x,y,xx,yy;;
set<pair<int,int>>st;
vector<pair<int,int>>a;
map<vector<pair<int,int>>,int>mp;
int main(void)

    bool flag=1;
    for(int i=0;i<4;i++)
    
        vector< pair<int,int> >temp;
        int x,y,xx,yy; cin>>x>>y>>xx>>yy;
        temp.push_back(x,y);
        temp.push_back(xx,yy);
        sort(temp.begin(),temp.end());
        mp[temp]++;
        if(x!=xx&&y!=yy) flag=0;//不是一条线
        if(x==xx&&y==yy) flag=0;//是一个点
        st.insert(x,y);
        st.insert(xx,yy);
    
    if(st.size()!=4) flag=0;//点的个数
    if(mp.size()!=4) flag=0;//不同的线段个数
    for(auto i=st.begin();i!=st.end();i++) a.push_back(*i);
    sort(a.begin(),a.end());
    if(a.size()==4)
    
        if(a[0].first!=a[1].first) flag=0;
        if(a[2].first!=a[3].first) flag=0;
        if(a[0].second!=a[2].second) flag=0;
        if(a[1].second!=a[3].second) flag=0;
    
    if(flag) puts("YES");
    else puts("NO");
    return 0;

D. Two Paths【直径】


题目的意思就是,一个树,将其分成俩连通块,求俩连通块的直径的乘积的最大值。
枚举每一条边,求去掉这条边后的俩连通块的直径,求一个max即可。

#include<bits/stdc++.h>
using namespace std;
const int N=210;
int g[N][N],st[N],n;
vector<int>ve[N];
int dfs(int u,int& temp)//求直径

    int d1=0,d2=0;
    st[u]=1;
    for(int i=0;i<ve[u].size();i++)
    
        int j=ve[u][i];
        if(!g[u][j]) continue;
        if(st[j]) continue;
        int t=dfs(j,temp);
        if(t>=d1) d2=d1,d1=t;
        else if(t>d2) d2=t; 
    
    temp=max(temp,d1+d2);
    return d1+1;

int main(void)

    cin>>n;
    for(int i=1;i<=n-1;i++)
    
        int a,b; cin>>a>>b;
        g[a][b]=1,g[b][a]=1;
        ve[a].push_back(b);
        ve[b].push_back(a);
    
    int ans=0;
    for(int i=1;i<=n;i++)
    
        for(int j=i+1;j<=n;j++)
        
            if(g[i][j])//枚举所有的线段
            
                g[i][j]=0,g[j][i]=0;
                int temp1=0,temp2=0;
                memset(st,0,sizeof st);
                dfs(i,temp1);
                memset(st,0,sizeof st);
                dfs(j,temp2);
                ans=max(ans,temp1*temp2);
                g[i][j]=1,g[j][i]=1;
            
        
    
    cout<<ans;
    return 0;

E. Camels【未完成 DP】

以上是关于Codeforces Beta Round #14 (Div. 2)未完结的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Beta Round #7

Codeforces Beta Round #5

Codeforces Beta Round #3

Codeforces Beta Round #29 (Div. 2, Codeforces format)

Codeforces Beta Round #31 (Div. 2, Codeforces format)

Codeforces Beta Round #34 (Div. 2)