https://vjudge.net/problem/UVA-11991
题目大意:就是给你一个序列,然后给出k和v,看整数v第k次出现在该序列的什么位置,没有的话就输出0
结构体(略复杂):
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
struct node
{
int num;
vector<int> v;
};
node N[100000+5];
int main()
{
int n,m,i,j,k,v,x;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
N[i].v.clear();
}
int num = 0;
for(i=1;i<=n;i++)
{
cin >> x;
if(num==0)
{
N[num].num = x;
N[num++].v.push_back(i);
}
else
{
int flag = 0;
for(j=0;j<num;j++)
{
if(N[j].num==x)
{
flag = 1;
N[j].v.push_back(i);
break;
}
}
if(flag==0)
{
N[num].num = x;
N[num++].v.push_back(i);
}
}
}
while(m--)
{
int flag = 0;
cin >> k >> v; //整数v的第k次出现
for(i=0;i<num;i++)
{
if(v==N[i].num)
{
if(N[i].v.size()>=k)
{
flag = 1;
cout << N[i].v[k-1] << endl;
break;
}
}
}
if(flag==0)
{
cout << "0\n";
}
}
}
return 0;
}
map + vector :
#include <iostream>
#include <map>
#include <vector>
using namespace std;
map<int,vector<int> > mp;
int main ()
{
int i,n,m,x,v,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
mp.clear();
for(i=1;i<=n;i++)
{
cin >> x;
mp[x].push_back(i);
}
while(m--)
{
cin >> k >> v;
if(mp[v].size()>=k && mp.count(v)>0)
{
cout << mp[v][k-1] << endl;
}
else
{
cout << "0" << endl;
}
}
}
return 0;
}
该博客主要解析UVA在线判题平台上的11991题,题目要求找到给定序列中整数v第k次出现的位置。如果不存在这样的位置,则输出0。解题策略可能涉及使用map和vector等数据结构。
&spm=1001.2101.3001.5002&articleId=88250289&d=1&t=3&u=2b2bdc3abdd74889a78716e51209f464)
435

被折叠的 条评论
为什么被折叠?



