CF14 合集

前言:

  1. 本人不会 LaTeX……请见谅
  2. 码风奇特,不喜勿喷哈
  3. 题面翻译取自 luogu,本蒟蒻也会安置原题链接
  4. 保证文章中不出现“显然”或者“注意到”,可能会出现“易证”
  5. AC 代码会放置在每一个题目的最底端,为防止 ban 码的情况出现,不设置跳转链接
  6. 有写错的地方欢迎各位神犇指正
  7. 本套题共 4 道,预计阅读 + 理解时间小于 5min(水题大合集)

正片开始!

CF14A

题面(可从下方链接跳转看原题题面):

题目传送门

序言 & 结论:

难度:红题

日常水题

推理过程:

直接做阅读程序题吧

细节处理:

代码:

点击查看代码

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=64;
int x,y;
char a[maxn][maxn];
int main(){
	int x_mn=99999,y_mn=99999,x_mx=-1,y_mx=-1;
	scanf("%d%d",&x,&y); 
	for(int i=0;i<x;i++){
		scanf("%s",a[i]);
	}
	for(int i=0;i<x;i++){
		for(int j=0;j<y;j++){
			if(a[i][j]=='*'){
				x_mn=min(x_mn,i);
				y_mn=min(y_mn,j);
				x_mx=max(x_mx,i);
				y_mx=max(y_mx,j);
			}
		}
	}
	for(int i=x_mn;i<=x_mx;i++){
		for(int j=y_mn;j<=y_mx;j++){
			printf("%c",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

完结撒花!

--------------------云落的分割线--------------------

CF14B

题面(可从下方链接跳转看原题题面):

题目传送门

序言 & 结论:

难度:橙题

水题+1

推理过程:

更新这些线段的交集即可,直接做做完了!

细节处理:

CF 数据太强了!注意 inf 开的大一点!

代码:

点击查看代码

#include<iostream>
using namespace std;
const int maxn=1024,inf=2147483647;
int n,m,a[maxn];
int main(){
	cin>>n>>m;
	int mn=inf,mx=-inf;
	for(int i=1;i<=n;i++){
		int l,r;
		cin>>l>>r;
		if(l>r){
			swap(l,r);
		}
		for(int j=l;j<=r;j++){
			a[j]++;
		}
		mn=min(mn,l);
		mx=max(mx,r);
	}
	bool flag=false;
	int ans=inf;
	for(int i=mn;i<=mx;i++){
		if(a[i]==n){
			ans=min(ans,abs(i-m));
			flag=true;
		}
	}
	if(flag){
		cout<<ans<<endl;
	}else{
		cout<<-1<<endl;
	}
	return 0;
}

完结撒花!

--------------------云落的分割线--------------------

CF14C

题面(可从下方链接跳转看原题题面):

题目传送门

序言 & 结论:

难度:黄题

水题+2

推理过程:

判断矩形的若干个要素

  1. 边与坐标轴平行

  2. 有四个点

  3. 每个点的度数为 $ 2 $

  4. 线段两点不重合!

细节处理:

坑点不少,但云落一遍切了,好 ~ 开 ~ 心 ~
代码:

点击查看代码
#include<iostream>
#include<map>
#include<utility>
#define pii pair<int,int>
#define fi first
#define se second
#define mkp make_pair 
using namespace std;
map<pii,int> mp;
int main(){
	int x=0,y=0,cnt=0;
	for(int i=1;i<=4;i++){
		int a,b,c,d;
		cin>>a>>b>>c>>d;
		mp[mkp(a,b)]++;
		mp[mkp(c,d)]++;
		if(a!=c&&b!=d){
			cout<<"NO"<<endl;
			return 0;
		}
		x+=(a==c);
		y+=(b==d);
		cnt+=(mp[mkp(a,b)]==2);
		cnt+=(mp[mkp(c,d)]==2);
	}
	if(x!=2||y!=2||cnt!=4){
		cout<<"NO"<<endl;
		return 0;
	}
	cout<<"YES"<<endl;
	return 0;
}

完结撒花!

--------------------云落的分割线--------------------

CF14D

题面(可从下方链接跳转看原题题面):

题目传送门

序言 & 结论:

难度:绿题

水题+3

推理过程:

注意到 $ n \le 200 $

我们可以暴力枚举每一条边,将一棵树以这条边为分解,拆成两棵子树

跑两遍树的直径

最后答案取所有枚举方案的最大值即可

细节处理:

云落的挂分历程:

代码:

点击查看代码
#include<iostream>
#define int long long
using namespace std;
const int maxn=256; 
int n,u[maxn],v[maxn];
int head[maxn],tot;
int dp[maxn],sum,s,ans;
struct Edge{
	int to,nxt;
}e[maxn<<1];
inline void add(int u,int v){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	head[u]=tot;
	return;
}
inline void dfs(int u,int fa){
	dp[u]=0;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==fa){
			continue;
		}
		dfs(v,u);
		sum=max(sum,dp[u]+dp[v]+1);
		dp[u]=max(dp[u],dp[v]+1);
	}
	return;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n-1;i++){
		cin>>u[i]>>v[i];
		add(u[i],v[i]);
		add(v[i],u[i]);
	}
	for(int i=1;i<=n-1;i++){
		s=1;
		dfs(u[i],v[i]);
		s*=sum;
		sum=0;
		dfs(v[i],u[i]);
		s*=sum;
		sum=0;
		ans=max(ans,s);
	}
	cout<<ans<<endl;
	return 0;
}

完结撒花!

posted @ 2024-11-22 09:47  sunxuhetai  阅读(56)  评论(1)    收藏  举报