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

Sep 28

只整理 T1, T2.
原题是 「ROI 2012 Day 1」密码 和 「ROI 2012 Day 2」剧院始于演员,可以与 LOJ 提交。

T1

考试的时候忘记 return 0, 导致一口气把所有答案都输出出来了,100->30,再次警示使用 break 的时候一定一定要看清楚能不能达到你想要的目的。

经过观察,对应区间处于第二个串中的长度绝对不会超过 6,我们从这里下手,枚举开始的位置,两个二分确定区间的左右位置,之后通过去掉区间的左右必须相等约束算出位置,hash判断就行了。

代码↓

点击查看代码
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int MN=1e6+116;
const int P=1145141;
int sum[MN], n, m;
string a, b;
ull hasha[MN], hashb[MN], p[MN];
int query(int l, int r){return sum[r]-sum[l-1];
}
ull gethasha(int l, int r){return hasha[r]-hasha[l-1]*p[r-l+1];
}
ull gethashb(int l, int r){return hashb[r]-hashb[l-1]*p[r-l+1];
}
unordered_map <int,int> trans;
vector <pair<int,int>> ans;
int main(){//freopen("password.in","r",stdin);//freopen("password.out","w",stdout); ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>a>>b; n=a.size(), m=b.size(); a=' '+a, b=' '+b;p[0]=1; for(int i=1; i<=n; ++i) p[i]=p[i-1]*P;for(int i=0; i<=9; ++i) trans[i]=rand();for(int i=1; i<=n; ++i){hasha[i]=hasha[i-1]*P+trans[(a[i]-'0')];}for(int i=1; i<=m; ++i){hashb[i]=hashb[i-1]*P+trans[(b[i]-'0')];}if(a==b){cout<<1<<" "<<1<<'\n'; return 0;}for(int i=1; i<=n; ++i){sum[i]=sum[i-1]+(a[i]-'0');}for(int i=1; i<=m; ++i){if(a[i-1]!=b[i-1]) break;//前边必须相等 for(int len=1; len<=6&&i+len-1<=m; ++len){//枚举长度 int val=0;for(int j=i; j<=i+len-1; ++j){val=val*10+(b[j]-'0');}int l=i, r=n, resr=n;while(l<=r){//尽量大 int mid=(l+r)>>1;if(query(i,mid)<=val){resr=mid; l=mid+1;}else{r=mid-1;}}l=i, r=n; int resl=n;//尽量小 while(l<=r){int mid=(l+r)>>1;if(query(i,mid)>=val){resl=mid; r=mid-1;}else{l=mid+1;}}if(query(i,resr)!=val) continue;if(m-len>=n-(resr-i+1)&&m-len<=n-(resl-i+1)){//合法 int res=n+i-1-m+len;if(gethasha(res+1,n)==gethashb(i+len,m)){ans.push_back({i,res});}}}}sort(ans.begin(),ans.end());cout<<ans[ans.size()-1].first<<" "<<ans[ans.size()-1].second;return 0;
}
`

T2

考场上想的思路,现在实现对了。

我们考虑异或哈希,每个人初始为 0, 对于每次操作,我们随机一个权值,将所有涉及的异或上这个值,明显的,当一个值唯一对应一个人,那么我们就可以确定这个人了。

代码↓

#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int MN=1e6+116;
int n, m, ans[MN], at[MN];
ull hashed[MN];
map <ull,set<int>> man;
vector <ull> eraser;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0' && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;
}
int main(){mt19937_64 rnd(time(0));ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);n=read(), m=read(); for(int i=1; i<=n; ++i) man[0].insert(i);for(int i=1,K; i<=m; ++i){K=read(); ull now=rnd();vector <ull> tmp; tmp.clear();for(int j=1,v; j<=K; ++j){at[j]=v=read();man[hashed[v]].erase(v);tmp.push_back(hashed[v]);hashed[v]^=now; man[hashed[v]].insert(v);}for(auto h:tmp){if(man[h].size()==1){if(!ans[*man[h].begin()]) ans[*man[h].begin()]=i;}}for(int j=1; j<=K; ++j){int x=at[j];if(!ans[x]&&man[hashed[x]].size()==1) ans[x]=i;}}for(int i=1; i<=n; ++i) cout<<ans[i]<<" ";return 0;
}
http://www.hskmm.com/?act=detail&tid=20082

相关文章:

  • 图像采集卡:连接镜头与机器的“视觉神经”,释放工业智能核心动力
  • 2025 年生态木厂商最新推荐榜单:TOP 前五企业实力解析及厂商选择指南生态木方通/户外地板/装饰线条/隔断/背景墙厂商推荐
  • 盲盒一番赏小应用用户需求分析:从行为动机到功能诉求的深度拆解
  • 解题报告-泥路(muddyroad.*)
  • 洛谷P10112 [GESP202312 八级] 奖品分配
  • P10400 『STA - R5』消失的计算机
  • 2025 地坪研磨机厂家推荐权威推荐排行榜:品牌深度解析及格力 / 宁德时代合作案例速递水磨石/遥控式/座驾式/小型地坪研磨机厂家推荐
  • 2025 年最新推荐铝塑膜源头厂家权威排行榜:聚焦 3000㎡厂房与完整产业链的优质企业盘点复合/防锈防潮/木箱包装/设备包装铝塑膜厂家推荐
  • 2025 年真空袋生产厂家最新权威推荐排行榜:TOP 级企业工艺、服务及适配场景全景对比指南木箱/设备/海运防潮/铝塑/电柜真空袋厂家推荐
  • 《码界飞升传II:数据星辰异界问道》
  • Win FAQ
  • 结论(数学)
  • loki收集容器日志
  • Xcode 火焰图
  • 完整教程:dlib库关键点定位和疲劳检测
  • 2025 长沙美食餐厅权威推荐排行榜:老店红记领衔新晋品牌,200 + 湘味与网红菜品深度解析,吃货必藏指南长沙美食湘菜馆 /大排档/网红店餐厅推荐
  • VKD233HH触控IC有两种输出方式“直接输出”和“锁存输出”单路触摸检测芯片
  • 打包present, but unavailable
  • 2025 年最新推荐环保门禁厂家权威排行榜:清洁运输 / 智能 / 移动源系统及电子台账厂商详析企业/智能环保门禁厂家推荐
  • 2025 年即时通讯公司推荐 小天互连:私有化部署即时通讯、信创即时通讯、国产化即时通讯、局域内网即时通讯、企业 IM 即时通讯解决方案解析
  • GJOI 模拟赛6、7部分题解
  • 【C++list】底层结构、迭代器核心原理与常用接口完成全解析
  • 完整教程:Flink Watermark机制解析
  • 2025 年北京湖南菜餐厅推荐:小湖南岸以湖湘本味与匠心服务,成京城湘菜口碑之选
  • Vector
  • SSM
  • Mybatis Plus
  • 0927模拟赛总结
  • AT_agc010_b [AGC010B] Boxes
  • Selenium自动化脚本总报错?这7个调试技巧帮你解决90%问题