나는 uva 온라인 판사의 코드를 작성하려고합니다. 각 테스트 케이스의 첫 번째 행에는 두 개의 정수 n, m (1 < = n; m < = 100 000)이 포함되며, n은 배열의 요소 수이고, m은 쿼리 수입니다. 다음 행에는 1 000 000 이하의 n 양의 정수가 포함됩니다. 다음 m 행에는 두 개의 정수 k와 v가 있습니다 (1 < = k < = n, 1 < = v < = 1 000 000). 각 쿼리에 대해 코드에서 v의 k 번째 항목을 인쇄해야합니다. 번호가 없으면 프로그램은 0을 인쇄해야합니다.프로그램이 너무 오래 실행됩니다. 또한지도가 어떻게 사용되며이 사례와 관련이 있습니까?
컴파일 할 때마다 완벽하게 작동하지만 프로그램 실행에는 시간이 오래 걸립니다. 필자는 맵을 사용하여 고려했지만 C++에 익숙하지 않았으며 구문을 알지 못했고 실제로 도움이 되는지도 모른다. 누군가 제게 조언 해 줄 수 있나요? 또한 온라인 재판관을 위해 나는 무엇을 입력해야하는지 사용자에게 말하지 않습니다. 가능한 한 표준 라이브러리를 사용하고 싶습니다.
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
long n,m,k,v,count=0; //initialise evrything
cin>>n>>m;
vector<long>N(n);
if(n==0)
{
for(long p=0;p<m;p++) //special case if n is 0
{
cin>>k>>v;
cout<<"0"<<endl;
}
}
else
{
for(long i=0;i<=n-1;i++) //give vector values
{
cin>>N[i]; //user inputs n values into N
}
for(long j=0;j<m;j++)
{
cin>>k>>v; //input k and v
for(long y=0;y<=n;y++)
{
if (N[y]==v && y<n)
{
count=count+1; // count instances of v
if (count==k) // end loop if kth position of v
// is found
{
cout<<y+1<<endl;
break;
}
else if(y==n) //if end of array reached print 0
{
cout<<"0"<<endl;
}
}
else if(y==n) //if end of array reached print 0
{cout<<"0"<<endl;}
}
count=0; //reset count
}
}
return 0;
}
문제가 메신저를 그래서 여기에 사용하는 두 가지 기능이있다 멀티 세트를 가지고있는 것은 내가 아는 한 요소의 위치를 찾을 수 없다는 것입니다. 나는 단지 v가 아닌 v의 k 번째 존재를 찾을 수 있어야한다. v –
이 경우, 'v'를 키로 사용하고 'v'위치를 값으로 사용하여 'multimap'이 작업을 수행해야한다. –