当前位置: 首页 > news >正文

【做题记录】CF2600左右有趣的思维题1

A. Latin Square

考虑维护三元组 \((i,j,a_{i,j})\)。例如:R 操作就是变成了 \((i,j+1,a_{i,j})\)I 操作就是变成了 \((i,a_{i,j},j)\)。时间复杂度 \(O(m+n^2)\)

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
using namespace std;
namespace asbt{
const int maxn=1e3+5;
int T,n,m,a[maxn][maxn],b[maxn][maxn];
string s;
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>T;while(T--){cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>a[i][j];a[i][j]--;}}int pa=1,pb=2,pc=3;int da=0,db=0,dc=0;cin>>s;for(char opt:s){switch(opt){case 'R':{db++;break;}case 'L':{db--;break;}case 'D':{da++;break;}case 'U':{da--;break;}case 'I':{swap(pb,pc),swap(db,dc);break;}default:{swap(pa,pc),swap(da,dc);break;}}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){int aa=pa==1?i:pa==2?j:a[i][j];int bb=pb==1?i:pb==2?j:a[i][j];int cc=pc==1?i:pc==2?j:a[i][j];aa=((aa+da)%n+n)%n;bb=((bb+db)%n+n)%n;cc=((cc+dc)%n+n)%n;b[aa+1][bb+1]=cc+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<b[i][j]<<' ';}cout<<'\n';}}return 0;
}
}
int main(){return asbt::main();}

B. Even Split

显然最小极差是可以二分出来的。check 不容易直接想,先考虑弱化版,假设已经知道了最短、最长的区间长度 \([x,y]\) 如何 check,线性扫一遍维护右端点区间即可。考虑如果这个 \(x\) 太大,即 \(\exist i,l>a_{i+1}\),则合法的 \(x'\) 必然满足 \(x'<x\);如果 \(y\) 太小,即 \(\exist i,r<a_i\),则必然满足 \(y'>y\),即 \(x'>x\),于是再二分 \(x'\) 即可。

考虑构造答案,先正向扫一遍使每一段满足最小值的限制,再反过来扫一遍满足最大值的限制即可,构造出的解必然合法。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
using namespace std;
namespace asbt{
const int maxn=1e5+5;
int n,m,a[maxn],mn,mx,b[maxn];
il int chk(int x,int y){mn=x,mx=y;int l=0,r=0;for(int i=1;i<=n;i++){if(l+x>a[i+1]){return 1;}if(r+y<a[i]){return -1;}l=max(a[i],l+x);r=min(a[i+1],r+y);}if(l>m){return 1;}if(r<m){return -1;}return 0;
}
il bool check(int x){int l=0,r=m;while(l<r){int mid=(l+r)>>1;switch(chk(mid,mid+x)){case 1:{r=mid;break;}case -1:{l=mid+1;break;}default:{return 1;break;}}}return 0;
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>m>>n;for(int i=1;i<=n;i++){cin>>a[i];}a[n+1]=m;int l=0,r=m;while(l<r){int mid=(l+r)>>1;if(check(mid)){r=mid;}else{l=mid+1;}}check(l);for(int i=1;i<=n;i++){b[i]=max(b[i-1]+mn,a[i]);}b[n]=m;for(int i=n;i;i--){b[i-1]=max(b[i-1],b[i]-mx);}for(int i=1;i<=n;i++){cout<<b[i-1]<<' '<<b[i]<<'\n';}return 0;
}
}
int main(){return asbt::main();}
http://www.jsqmd.com/news/8173/

相关文章:

  • pdf翻译
  • OpenEuler 25.03 installed UKUI but cant run msedge and chrome
  • 实用指南:iPhone美区账号登录指南:轻松下载ChatGPT应用
  • 网络调整config.xml的android.mk解析
  • 【Android】RuntimeShader 应用
  • 【Rive】rive-android源码分析
  • 完整教程:基于Spring Boot的爱琴海购物公园网上商城系统的设计与实现
  • Microsoft Access SQL 查询中的通配符 - 详解
  • 洛谷P11738 [集训队互测 2015] 未来程序改
  • mcp 面试题
  • 6_什么是知识图谱
  • 实用指南:[创业之路-645]:手机属于通信?还是属于消费类电子?还是移动互联网?
  • 【开题答辩过程】以《基于SpringBoot+Vue+uni-app的智慧校园服务系统的设计与搭建》为例,不会开题答辩的可能进来看看
  • 微信ipad协议个微机器人开发API
  • 面向对象编程(OOP)的三大特性之一(封装、继承、多态)就是第八章聚焦于C++的多态(Polymorphism),这
  • ai提交消息常用的 chore,原来是个单词(琐事/零散任务)+约定,用于非功能性提交
  • 答疑解惑:无人机是否一定有主控,主控和飞控是一个东西吗,无人机是否只有飞控就可以飞行???
  • 多项式定理
  • The Brain in Your Toes: Can Tiny Foot Movements Boost BDNF and Sharpen the Mind? - 教程
  • 一直好奇无人机飞控上的SD卡槽是不是用来装系统盘的,结果发现这个其实就是个数据存储的作用,飞控板子上自带系统盘存储芯片
  • 四旋翼无人机 —— 飞控硬件推荐 —— 微空MicoAir743 V2飞控双IMU蓝牙调参 支持APM/PX4/INAV/BF固件
  • 详细介绍:OpenAI近日推出了一项名为 ChatGPT Pulse 的全新功能
  • 详细介绍:Kafka09-速答-尚硅谷
  • GPT‑5 都更新了些什么? - 实践
  • day15 课程(继承 )
  • 前端安全障碍深度解析:从原理到实践的全方位防护指南
  • node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效
  • 微商本地化发展模式的借鉴与探讨——以开源AI智能名片链动2+1模式S2B2C商城小工具为例
  • 微服务网关深度设计:从Spring Cloud Gateway到Envoy,流量治理与安全认证实战指南 - 指南
  • Docker 部署 RAGFlow 全流程教程