只需查看评论中''之间的代码即可。它输出所有'0'而没有别的。为什么它只生成0而不是我刚刚插入到stl Map中的元素?
例如,如果我的输入是'3,45,6,3,1'那么输出应该是'1,2,3,1,5',不应该是吗?
#include<bits/stdc++.h>
#define lli long long int
using namespace std;
lli k,o[1000010];
int n,tmp=0,i,uq=0,what,ans=1;
map<lli,int> tp;
int main() {
cin>>n>>k;
//<tagz
for (i=1;i<=n;i++) {
cin>>o[i];
if (tp[o[i]]==0) uq++;
tp.insert(make_pair(o[i],i));
cout<<tp[o[i]]<<",";
tmp=max(tmp,tp[o[i]]);
}
// /tagz>
//cout<<"ZZZ:tmp="<<tmp<<" ,uq="<<uq<<endl;
cout<<"ZZZ:"<<tp[2]<<endl;
if (uq<k) {
cout<<"0";
return 0;
}
i=tmp;int fck=0;
for (;i<n;i++) {
fck++;if (fck==200) break;
// cout<<"AT "<<i<<endl;
uq=1;tmp=0;
map<lli,int> yo;
for (int j=i+1;j<n;j++) {
if (o[j]!=o[i]) {
if (yo[o[j]]==0) uq++;
yo.insert(make_pair(o[j],j));
tmp=max(tmp,yo[o[j]]);
}
}
if (uq<k) {
cout<<ans;
return 0;
}
// cout<<" Uq="<<uq<<", tmp="<<tmp<<endl;
ans++;
i=tmp;
}
cout<<ans;
}
答案 0 :(得分:1)
当您使用[]
访问地图时,它首先会检查地图中是否存在该密钥。如果它没有,那么它会创建一个具有默认值的新成员(在本例中为0)。
当您使用insert
功能时,只有在没有该值的值时才会插入该值。
如需更多参考,请阅读以下答案:https://stackoverflow.com/a/4286924/1466095
在这种情况下,会发生什么:
if (tp[o[i]]==0) uq++;
:此行为值为0的键创建一个新元素。
tp.insert(make_pair(o[i],i));
:下一行没有做任何事情,因为地图中已存在一个带有键o[i]
的成员。因此,您的输出全部为0。
要解决此问题,您需要将行插入行替换为:
tp[o[i]] = i;