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 #29 (Div. 2, Codeforces format)