CF370

废话

  1. 370:纪念盗笔青春

  2. 提交记录

几个脑残错误后文会提到

3.题目:
黄黄绿蓝蓝( 幸好 370 不是“红红红红红” | “黑黑黑黑黑” )
算法: 是没有滴 贪心,前缀和

正题

CF370A

Rook, Bishop and King

签到数学题

车可以两步到达任意点 ,只需判断出发点与目标点是否在同行 | 同列
王有个性质是每次可以同时改变行列,但不必须,所以答案即为横纵坐标的差的最大值
象必须每次同时改变行列,并不能到达所有点 ( 白格只能到白格 )所以判断奇偶输出 0 ,剩下的点与车同理

#include <bits/stdc++.h>
using namespace std;
int x1,y1,x2,y2;
int main(){cin>>x1>>y1>>x2>>y2;if(x1==x2||y1==y2)cout<<1<<" ";else cout<<2<<" ";if(y1-x1==y2-x2||y1+x1==y2+x2)cout<<1<<" ";else if((y1+x1)%2!=(y2+x2)%2)cout<<0<<" ";else cout<<2<<" ";cout<<max(abs(x2-x1),abs(y2-y1));return 0;
}

CF370B

Berland Bingo
签到 不知道是什么

对每个卡暴力判断子集即可,因为若其他卡是他的子集,那么消他的时候那个卡也会被消掉

#include <bits/stdc++.h>
using namespace std;
const int N=105;
int n,m[N],a[N][N],o[N],maxn;
bool flag=1;
bool check(int x){int cnt=0;for(int i=1;i<=m[x];i++){cnt+=o[a[x][i]];}if(cnt==m[x])return 0;return 1;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>m[i];for(int j=1;j<=m[i];j++){cin>>a[i][j];maxn=max(maxn,a[i][j]);}}for(int i=1;i<=n;i++){flag=1;for(int i=1;i<=maxn;i++)o[i]=0;for(int j=1;j<=m[i];j++)o[a[i][j]]=1;for(int j=1;j<=n;j++){if(i==j||m[j]>m[i])continue;if(!check(j)){cout<<"NO"<<endl;flag=0;break;}}if(flag)cout<<"YES"<<endl;}return 0;
}

CF370C

Mittens
题解全是错的,不要看

按照颜色数量排个序,发现左边换右边就行
发现若左边右边重合则同色
同色数量:2n-2o , o 为最大颜色数量

#include <bits/stdc++.h>
using namespace std;
const int N=5e3+3;
int n,m,a[N],p,cnt,o;
struct node{int x,num;
}e[N];
bool cmp(node a,node b){return a.x>b.x;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n);for(int i=1;i<=n;i++){if(a[i]!=a[i-1]){e[++cnt].num=a[i-1],e[cnt].x=p;o=max(o,p);p=0;}p++;}if(p)e[++cnt].num=a[n],e[cnt].x=p;o=max(p,o);if(o>n/2)cout<<2*n-2*o<<endl;else cout<<n<<endl;sort(e+1,e+1+cnt,cmp);n=0;for(int i=1;i<=cnt;i++)for(int j=1;j<=e[i].x;j++)a[n++]=e[i].num;for(int i=0;i<n;i++){cout<<a[i]<<" "<<a[(i+n/2)%n]<<endl;}return 0;
}

错误原因:if(p)e[++cnt].num=a[n],e[cnt].x=p;没加最后一个块

CF370D

Broken Monitor

注意:方框==正方形

所以正方形的边长能确定,就是\(max(maxx-minx,maxy-miny)\)

然后就直接枚举正方形的左上角判断是否所有 \(w\) 都在框上

如何判断是否所有 \(w\) 都在框上?
用二维前缀和!大正方形 - 比他小一圈的正方形 = 框

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2005;
int n,m,sum[N][N],minx=0x7f7f7f7f,miny=0x7f7f7f7f,maxx,maxy,edge,num;
char a[N][N];
signed main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+(a[i][j]=='w');if(a[i][j]=='w')num++,minx=min(minx,i),maxx=max(maxx,i),miny=min(miny,j),maxy=max(maxy,j);}}edge=max(maxx-minx,maxy-miny)+1;if(edge>min(n,m)){cout<<-1;return 0;}
//	cout<<num;for(int i=1;i+edge-1<=n;i++){for(int j=1;j+edge-1<=m;j++){int x1=i,y1=j,x2=i+edge-1,y2=j+edge-1,a1=x1+1,a2=x2-1,b1=y1+1,b2=y2-1;//if(i==1&&j==3)cout<<x1<<" "<<x2<<" "<<y1<<" "<<y2;if(edge>2){if(sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]==num){if(!(sum[a2][b2]-sum[a2][b1-1]-sum[a1-1][b2]+sum[a1-1][b1-1])){for(int k=1;k<=n;k++){for(int h=1;h<=m;h++){if(((k==x1&&(h<=y2&&h>=y1))||(k==x2&&(h<=y2&&h>=y1)))||((h==y1&&(k<=x2&&k>=x1))||(h==y2&&(k<=x2&&k>=x1)))){if(a[k][h]=='w')cout<<'w';else cout<<'+';}else cout<<'.';}cout<<endl;}
//						for(int k=1;k<=n;k++){
//							for(int h=1;h<=m;h++){
//								if(a)
//							}
//							cout<<endl;
//						}return 0;}}}else {if(sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]==num){for(int k=1;k<=n;k++){for(int h=1;h<=m;h++){if(((k==x1&&(h<=y2&&h>=y1))||(k==x2&&(h<=y2&&h>=y1)))||((h==y1&&(k<=x2&&k>=x1))||(h==y2&&(k<=x2&&k>=x1)))){if(a[k][h]=='w')cout<<'w';else cout<<'+';}else cout<<'.';}cout<<endl;}return 0;}}}}cout<<-1<<endl;return 0;
}

由提交记录得我挂了多次, 还好有拍子
错误:

  1. a[k][h] 写成 a[h][k]
  2. maxy=max(maxy,j) 写成 maxy=min(maxy,j)
  3. ! 不打 ()

我还是太菜了

CF370E

summer reading

cf 上的题解是 dp ,但我看不懂 ,洛谷的题解也像()一样,连代码都没有 ,故这里只讲我的贪心 ,( 有大佬会 dp 浇浇 )

记录一个 pair 的 minn maxn 表示使结果最小/最大的当前的数和量

于是可以由上一个转移过来

if(maxn[i-1].se>=2)maxn[i]=pii(maxn[i-1].fi+1,1);
else maxn[i]=pii(maxn[i-1].fi,maxn[i-1].se+1);
if(minn[i-1].se==5)minn[i]=pii(minn[i-1].fi+1,1);
else minn[i]=pii(minn[i-1].fi,minn[i-1].se+1);

目的就是判断可不可行 if(minn[i].fi>a[i]||maxn[i].fi<a[i])

到规定值时要手动修改值
maxn[i]=min(maxn[i],pii(a[i],5)); minn[i]=max(minn[i],pii(a[i],1));

手动修改值后
输出 直接取 maxn 即可

其实看代码更好理解

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
#define pii pair<int,int>
#define fi first
#define se second
pii minn[N],maxn[N];
int n,a[N],cnt[N];
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];if(a[1]>1){cout<<-1;return 0;}minn[1]=maxn[1]=pii(1,1);for(int i=2;i<=n;i++){if(maxn[i-1].se>=2)maxn[i]=pii(maxn[i-1].fi+1,1);else maxn[i]=pii(maxn[i-1].fi,maxn[i-1].se+1);if(minn[i-1].se==5)minn[i]=pii(minn[i-1].fi+1,1);else minn[i]=pii(minn[i-1].fi,minn[i-1].se+1);if(a[i]){if(minn[i].fi>a[i]||maxn[i].fi<a[i]){//	cout<<i;cout<<-1;return 0;}maxn[i]=min(maxn[i],pii(a[i],5));minn[i]=max(minn[i],pii(a[i],1));}//	cout<<maxn[i].fi<<" "<<maxn[i].se<<" "<<minn[i].fi<<" "<<minn[i].se<<endl;}if(maxn[n].se==1)maxn[n]=pii(maxn[n].fi-1,5);if(maxn[n]<minn[n]){cout<<-1<<endl;return 0;}cout<<maxn[n].fi<<endl;a[n]=maxn[n].fi;cnt[a[n]]=1;for(int i=n-1;i;i--){a[i]=min(maxn[i].fi,a[i+1]); if(cnt[a[i]]==5)  a[i]--;//手动修改cnt[a[i]]++;}for(int i=1;i<=n;i++)cout<<a[i]<<' ';return 0;
}

完结撒花

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那两天,我的灵魂缺失了

写在前面 261 字 | 思念 | 回忆 | 爱恋 | 悔恨 | 执念 | 断舍离 | 放弃 For Nileicna. 正文我的灵魂每一天都在游走。6 月 8 日的下午 17:00,吹过一阵风,带走我的身体。我的灵魂停留在原地。我跟很多人说,我不认识你。那些时候,我的灵魂总是寄存在十字架上。自那天之后,每…

轻松上手CANoe Scenario Editor———智能网联工程师入门篇

(小编先带大家扫盲一下) V2X(Vehicle-to-Everything,车与万物通信)是一种先进的通信技术,使车辆能够与周围环境进行信息交换。这不仅包括与其他车辆(V2V)的互动,还涵盖与基础设施(V2I)和行人(V2P)的通信。通过V2X,车辆能够实时获取周围信息,从而提升行驶安全性和…

Windows Server 2016 中文版、英文版下载 (updated Oct 2024)

Windows Server 2016 中文版、英文版下载 (updated Oct 2024)Windows Server 2016 中文版、英文版下载 (updated Oct 2024) Windows Server 2016 Version 1607 请访问原文链接:https://sysin.org/blog/windows-server-2016/ 查看最新版。原创作品,转载请保留出处。 作者主页:…

Windows 7 Windows Server 2008 R2 简体中文版下载 (updated Oct 2024)

Windows 7 & Windows Server 2008 R2 简体中文版下载 (updated Oct 2024)Windows 7 & Windows Server 2008 R2 简体中文版下载 (updated Oct 2024) Windows 7 & Windows Server 2008 R2 (2024 年 10 月更新) 请访问原文链接:https://sysin.org/blog/windows-7/ 查…

SA:从入门到入土

基本应用 读入一个长度为 $ n $ 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序(用 ASCII 数值比较)从小到大排序。 解法 1.将每个后缀取出来,直接排序 \(O(n^2 \log n)\) 2.用hash二分LCP比较下一位,\(O(n \log^2 n)\) 3.倍增求后缀数组,\…

06.动态代理设计模式

06.动态代理设计模式 目录介绍01.为何要动态代理1.1 为何要动态代理 1.2 动态代理思考02.动态代理的概念2.1 动态代理定义 2.2 动态代理类比理解 2.3 动态代理参与者 2.4 动态代理步骤03.动态代理的实现3.1 罗列一个场景 3.2 用一个例子理解代理 3.3 基于接口动态代理 3.4 基于…

.NET 8.0 开源在线考试系统(支持移动端)

https://www.cnblogs.com/1312mn/p/18510576阅读目录前言 系统介绍 系统功能 支持环境 系统源码 项目部署 项目效果 项目总结 项目地址 最后前言 推荐一款基于.NET 8.0 免费开源跨平台在线考试系统,系统不仅支持桌面端,还特别优化了移动端的用户体验。 通过本系统可以轻松搭建…

GaussDB数据计算路由层(Coordinator)关键技术方案

GaussDB Kernel V5版本的Catalog还是本地存储, 所以还需要考虑catalog的持久化问题.未来演进元数据解耦,Coordinator 无状态, 就不需要考虑Catalog持久化问题了。但是跨节点场景下的事务提交在Coordinator上还是要持久化的。图14 Coordinator模块图 路由信息:每个表数据共分1…

GaussDB全局事务管理层(GTM)关键技术方案

GTM 仅处理全局时间戳请求, 64位CSN递增,几乎都是CPU ++和消息收发操作。不是每次都写ETCD, 而是采用定期持久化到ETCD 里, 每次写ETCD的CSN要加上一个backup_step (100w), 一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM 只完成CSN++, 预估可以支持200M/s 请求…

GaussDB集群管理层(CM)关键技术方案

GaussDB Kernel V5 集群管理层关键模块如下。图4 集群管理层组件设计图 CM 组件提供了四种服务 CM Agent, CM Server, OM Monitor, cm_ctl,与各类实例服务组件(CN, DN, GTM 等)一起构成了整个数据库集群系统。cm_ctl通过命令行执行集群的启动、停止、状态查询、主备倒换、备…

2024年10月中国数据库排行榜:TiDB续探花,GaussDB升四强

10月墨天轮排行榜解读已发布!OceanBase、PolarDB、TiDB三甲格局稳定,GaussDB排名攀升至第四,此外亦有部分产品表现亮眼,一起来看更多排名情况与解读。10月中国数据库流行度排行榜如期发布,再次印证了市场分层的加速形成。国家数据库测评结果已然揭晓,本批次通过的产品数量…

GaussDB技术解读——查询优化器

查询优化阶段主要是SQL执行过程中在优化器SQL Optimizer中执行的部分,优化器作为数据库的大脑是SQL执行路径决策者,从全局视角出发提升查询的性能,降低用户使用数据库调优的门槛。查询优化总体上分为逻辑优化、物理优化。查询优化从总体上可以分成两类: 1、基于规则的逻辑优…