[46] (多校联训) A层冲刺NOIP2024模拟赛06

news/2024/10/12 19:43:10

HDK 在与 mt19937_64 先生的石头剪刀布比赛中拿下十一连败的好成绩

你也来试试吧
#include<bits/stdc++.h>
using namespace std;
#include"include/hdk/rand.h"
using namespace hdk::Rand;
char getchar_(){char ch=getchar();if(ch>='a' and ch<='z') ch+=('A'-'a');while(ch!='S' and ch!='R' and ch!='P'){ch=getchar();if(ch>='a' and ch<='z') ch+=('A'-'a');}return ch;
}
int cnt=0,tot=0,totm=0;
int main(){randt.device_srand();while(1){totm++;cout<<"Act (R 石头 | S 剪刀 | P 布)>>";cout.flush();char ans=getchar_();char act=randt.randfrom<char>({'R','S','P'});cout<<"Robot act with   "<<act<<endl;if(ans==act){cout<<"Draw."<<endl;}else if(ans=='R'){if(act=='S'){cout<<"You win."<<endl;tot++;cnt++;}if(act=='P'){cout<<"You lost."<<endl;cnt=0;}}else if(ans=='S'){if(act=='R'){cout<<"You lost."<<endl;cnt=0;}if(act=='P'){cout<<"You win."<<endl;tot++;cnt++;}}else{if(act=='R'){cout<<"You win."<<endl;tot++;cnt++;}if(act=='S'){cout<<"You lost."<<endl;cnt=0;}}cout<<"Longest Streak: "<<cnt<<" Rounds"<<endl;cout<<"Win: "<<tot<<"/"<<totm<<endl<<endl;}
}

rand.h

#ifndef HDK
#define HDK 0
#endif
#ifndef RAND_H
#define RAND_H
#include<bits/stdc++.h>
using namespace std;
namespace hdk{namespace Rand{
random_device __rd;
struct __Rand{mt19937_64 _Rand;long long Rand(){return ((_Rand())|(_Rand()<<20))&(_Rand()|_Rand());}int SystemRand(long long a,long long b){return std::rand()%(b-a+1)+a;}int RandSignedInt(){return (int)Rand();}int RandSignedInt(int l,int r){int res=RandSignedInt();while(res<l or res>r) res=RandSignedInt();return res;}int RandInt(){return abs(RandSignedInt());}int RandInt(int a,int b){return abs(RandSignedInt())%(b-a+1)+a;}long long RandSignedLong(){return (long long)Rand();}long long RandSignedLong(long long l,long long r){long long res=RandSignedLong();while(res<l or res>r)  res=RandSignedLong();return res;}long long RandLong(){return llabs(RandSignedLong());}long long RandLong(long long a,long long b){return RandLong()%(b-a+1)+a;}unsigned long long device_srand(){unsigned long long seed=__rd();_Rand=mt19937_64(seed);return seed;}unsigned long long time_srand(){unsigned long long seed=time(0);_Rand=mt19937_64(seed);return seed;}void seed_srand(unsigned long long seed=time(0)){_Rand=mt19937_64(seed);}long double RandReal(int fixed){long long res=1;for(int i=1;i<=fixed;++i) res*=10;int rres=RandLong(0,res);cout<<rres<<endl;return rres*1.0/res;}bool access(double access_p){long long res=RandLong();cout<<res<<endl;if(res<=LLONG_MAX*access_p){return true;}return false;}template<typename T>T randfrom(vector<T>A){return A[RandLong(0,(int)A.size()-1)];}template<typename T>T randfrom(T A[],int l,int r){return A[RandLong(l,r)];}
}randt;
struct RandTest{void Balanced_Test(int r,int times,bool display=false){map<int,int>mp;double aver=times*1.0/r,sum=0;while(times--){mp[randt.RandInt(1,r)]++;}for(int i=1;i<=r;++i){if(display) cout<<"["<<i<<","<<mp[i]<<"]"<<endl;sum+=(aver-mp[i])*(aver-mp[i]);}cout<<"[randt Sqrt Dx]: "<<sqrt(sum)<<endl;cout<<endl;}void System_Balanced_Test(int r,int times,bool display=false){map<int,int>mp;srand(__rd());double aver=times*1.0/r,sum=0;while(times--){mp[rand()%r+1]++;}for(int i=1;i<=r;++i){if(display) cout<<"["<<i<<","<<mp[i]<<"]"<<endl;sum+=(aver-mp[i])*(aver-mp[i]);}cout<<"[std::rand Sqrt Dx]: "<<sqrt(sum)<<endl;cout<<endl;}
};
RandTest Test;
}
}
#endif

A.小 Z 的手套

二分答案

考虑如何 check

首先可以想到的是,对数组排序,让大的和大的配是更优的

那么我们可以开一个双指针,每次在不满足当前 check 值的时候移动那个大的数组的指针,直到其中一个指针走到头

此时如果是大的数组的指针走到头则不合法,小的走到头则合法

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int l[100001],r[100001];
bool check(int maxn){// cout<<"check "<<maxn<<endl;int j=1;for(int i=1;i<=m;++i){while(llabs(l[j]-r[i])>maxn){// cout<<"out "<<j<<" "<<i<<endl;j++;if(j>n) return false;}// cout<<"pipei "<<j<<" "<<i<<endl;j++;}return true;
}
signed main(){freopen("gloves.in","r",stdin);freopen("gloves.out","w",stdout);// freopen("sample/gloves/ex_gloves4.in","r",stdin);scanf("%lld %lld",&n,&m);for(int i=1;i<=n;++i){scanf("%lld",&l[i]);} for(int i=1;i<=m;++i){scanf("%lld",&r[i]);}sort(l+1,l+n+1);sort(r+1,r+m+1);if(n==m){int ans=0;for(int i=1;i<=n;++i){ans=max(ans,llabs(r[i]-l[i]));}cout<<ans;return 0;}if(n<m){swap(n,m);swap(l,r);}int l=0,r=1e9,ans=-1;while(l<=r){// cout<<l<<" "<<r<<endl;int mid=(l+r)/2;if(check(mid)){r=mid-1;ans=mid;}else{l=mid+1;}}cout<<ans;
}

B.小 Z 的字符串

DP

我们可以考虑直接通过从零开始填,考虑将每个数从当前位置挪到目标位置的花费

有一个性质,就是两个相同的数的相对位置在交换过程中是始终不变的,因此我们直接维护某一个数对应顺序的数字初始位置是多少,直接按照枚举目标顺序转移就行

从头开始填数,设 \(f_{i,j,k,0/1/2}\)\(0/1/2\) 分别有 \(i/j/k\) 个,上一个选择的是 \(0/1/2\) 的最小交换次数

那么现在填到的位置就是 \(p=i+j+k\),那么需要的交换次数即为 \(|p-p0|\)

显然填数的时候不能与上一位相同,既 \(f_{i,j,k,0}\) 不能从 \(f_{i-1,j,k,0}\) 转移过来,但是可以从 \(f_{i,j,k,1}, f_{i,j,k,2}\) 转移

剩下的同理

#include<bits/stdc++.h>
using namespace std;
class huge{public:auto operator()(char x){return x-'0';}}huge;
string x;
vector<int>pos[3]={{0},{0},{0}};
int f[201][201][201][3];
int cnt[3];
int main(){freopen("string.in","r",stdin);freopen("string.out","w",stdout);cin>>x;for(int i=0;i<=(int)x.length()-1;++i){pos[huge(x[i])].push_back(i+1);lxyt:;}for(int i:{0,1,2}) cnt[i]=(int)pos[i].size()-1;if(max({cnt[0],cnt[1],cnt[2]})>ceil((int)x.length()/2.0)){cout<<-1;return 0;}memset(f,0x3f,sizeof f);memset(f[0][0][0],0,sizeof f[0][0][0]);for(int i=0;i<=cnt[0];++i){for(int j=0;j<=cnt[1];++j){for(int k=0;k<=cnt[2];++k){int p=i+j+k;if(i) f[i][j][k][0]=min(f[i-1][j][k][1],f[i-1][j][k][2])+abs(p-pos[0][i]);if(j) f[i][j][k][1]=min(f[i][j-1][k][0],f[i][j-1][k][2])+abs(p-pos[1][j]);if(k) f[i][j][k][2]=min(f[i][j][k-1][0],f[i][j][k-1][1])+abs(p-pos[2][k]);}}}cout<<min({f[cnt[0]][cnt[1]][cnt[2]][0],f[cnt[0]][cnt[1]][cnt[2]][1],f[cnt[0]][cnt[1]][cnt[2]][2]})/2;
}

C.一个真实的故事

打 abc,Tomorrow update


关注羽田山猫喵

虽然我现在不用

等到差不多 1400 左右就用这个小号打 ABC,感觉现在大号 ABC 收益不大了,按 at 的 rating 机制还是省着点给 ARC


这是什么

小羊可爱捏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用阿里云物联网平台流程

​模拟设备连接阿里云物联网平台 ​编辑 ​编辑 1.找到物联网平台 阿里云物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务(存储、分析、过滤、解析、集成等)等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云…

【应急响应+Linux】常见的rootkit隐藏手段:通过劫持shell环境,实现文件、进程名隐藏等操作

原理 修改或构造/etc/profile.d/ 下sh文件,劫持环境变量,从而实现覆盖常见的命令,如:ps、ls、lsof等; 实现: 1、配置环境变量 shell脚本:重新登录用户之后;或者使用命令source /etc/profile 更新配置,使生效; 2、根目录下存在的myshell.sh文件被隐藏:执行ls命令效果…

UPX 脱壳 学习

加壳是什么? 程序保护机制,保护程序不那么容易呗逆向。upx是一种开源的压缩壳软件 命令行执行: 加壳:UPX + sample.exe 脱壳:upx -d sqmlp.exe(一般不管用) 手动脱壳 1.找到原始程序的入口地址(OEP) 2.在原始程序入口地址处设置**硬件断点**(下次调试可快速进入原始代…

【应急响应+Linux】常见的rootkit隐藏手段:通过挂载/proc/pid实现pid隐藏

原理 ps 、netstat 是遍历/proc 来显示pid的原理,通过隐藏相关 /proc/pid 文件夹来实现pid隐藏 实现 运行如下命令,将pid对应文件夹挂载到隐藏目录上面 mount -o bind /home/.hidden /proc/9212现象: 如下图,使用root权限调用 netstat 发现 PID和Programname 都是空:排查方…

ton发起交易的时候需要先设置一点value作为gasfee,用完它会退回。

如果不设置gasfee,ton就不会处理的: // Send Msglet msg = beginCell().storeBuffer(Buffer.from("c5341626", "hex")) // 发送结构体.storeStringTail("1").endCell()let seqno: number = await wallet_contract.getSeqno()console.log(&qu…

什么是AI网关?AI网关在企业系统中承担什么角色?

AI 大模型的发展正在推动各行业的增长,据有关报告显示:“未来十年内预计年均增长率将达到37.3%,全球企业预计在2027年之前将在AI领域投入8000亿美元"。这一迅猛发展促使许多企业进行战略转型,技术团队也需要调整其构建、运行、扩展及保护AI应用、网络和基础设施的方式…

Issac_GYM对Go2机器人的仿真心得

override 覆盖 torques 扭矩 1 args()参数信息等 cd /home/yyds/桌面/Gym2/legged_robot_competition-master/legged_gym/legged_gym/utils/helpers.py这里对 train等参数的调用情况进行了说明 比如: python play.py --task=go2 --num_envs=64 --checkpoint=50 --load_run=/…

2024-2025-1 20241401 《计算机基础与程序设计》 第三周学习总结

班级的链接 2024计算机基础与程序设计作业要求 第三周作业作业目标 1、数字分类与计数法位置计数法,2、进制转换,3、模拟数据与数字数据,4、压缩与解压,5、数字化,6、信息安全作业正文 本博客教材学习内容总结 《计算机科学概论》第二章、第三章二进制数值 计数系统(进制…