狠狠地切割(Hard Version)

狠狠地切割(Hard Version)

(https://www.luogu.com.cn/problem/P8889)
跟easy版非常像,但是数据太大开标记数组的话会爆所.以得转换一下
开一个map<longlong,int>作为标记就好了

注意在每次循环的时候要更新检索的位置

code

for (int i = 1; i <= n; i++) {
cin >> ve[i];
}
for (int i = 1; i <= m; i++) {
cin >> ve1[i];
mp[ve1[i]]= 1;
}
int count = 0;
for (int i = 1; i <= n;i++) {
if(!mp[ve[i]]){
count++;
while (i <= n && mp[ve[i]]!=1)i++;
}
}
要是标记两次的话会被t(我也不知道为什么)

这是被t的code

for (int i = 1; i <= n; i++) {
cin >> ve[i];
mp[ve[i]] = 1;
}
for (int i = 1; i <= m; i++) {
cin >> ve1[i];
if(mp[ve1[i]] == 1)mp[ve1[i]] = 2;
}
int count = 0;
for (int i = 1; i <= n;i++) {
if(mp[ve[i]]==1){
count++;
while (mp[ve[i]]!=2 && i <= n)i++;
}
}
cout << count;
return 0;
}
posted @   TFOREVERY  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示