CF14 合集
前言:
- 本人不会 LaTeX……请见谅
- 码风奇特,不喜勿喷哈
- 题面翻译取自 luogu,本蒟蒻也会安置原题链接
- 保证文章中不出现“显然”或者“注意到”,可能会出现“易证”
- AC 代码会放置在每一个题目的最底端,为防止 ban 码的情况出现,不设置跳转链接
- 有写错的地方欢迎各位神犇指正
- 本套题共 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
推理过程:
判断矩形的若干个要素
-
边与坐标轴平行
-
有四个点
-
每个点的度数为 $ 2 $
-
线段两点不重合!
细节处理:
坑点不少,但云落一遍切了,好 ~ 开 ~ 心 ~
代码:
点击查看代码
#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;
}
完结撒花!

浙公网安备 33010602011771号