map用法
给出两个用法的样例
注意使用课件
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
map<pair<int,int>,int>val;
vector<int>x(n);
vector<int>y(n);
//int x,y;
for(int i=0;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
val[{x[i],y[i]}]++;
}
//int ans=0;
for(int i=0;i<n;i++)
{
int ans=0;
ans+=val[{x[i-1],y[i]}];
ans+=val[{x[i+1],y[i]}];
ans+=val[{x[i],y[i-1]}];
ans+=val[{x[i],y[i+1]}];
printf("%d\n",ans);
}
return 0;
}
第二题,这个题有一些错误
首先如何表示这种结构,map里面有两个变量结构的时候处理;其次map的表示手法,先中括号再大括号;最后是看清题意,注意题目要求的下标开始
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
vector<int>q(n);
for(int i=0;i<n;i++)
scanf("%d",&q[i]);
map<int,int>occurs;
map<pair<int,int>,int>vis;
for(int i=0;i<n;i++)
{
occurs[q[i]]++;
vis[{q[i],occurs[q[i]]}]=i+1;
}
int k,v;
for(int i=0;i<m;i++)
{
scanf("%d%d",&k,&v);
printf("%d\n",vis[{v,k}]);
}
}
return 0;
}
下一题:巨人排队 1023
这题有几个点:首先迭代器,不能用常规指针表示了;然后是程序用了错误的if,else这点没有检查出来,一定记住写代码时候想的东西
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
set<int>s;
int len;
for(int i=0;i<n;i++)
{
scanf("%d",&len);
set<int>::iterator it=s.lower_bound(len);
if(it!=s.end())
{
s.erase(*it);
}
s.insert(len);
}
printf("%d\n",s.size());
}
return 0;
}
stl的东西先搞这么多,主要是一些容器的使用方式记住,会简单很多,学会vector,priority_queue,deque,map,set,multiset