Pagini recente » Cod sursa (job #1193213) | Cod sursa (job #1287175) | Cod sursa (job #226803) | Cod sursa (job #2157481) | Cod sursa (job #955340)
Cod sursa(job #955340)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
std::ifstream in ("nextseq.in");
std::ofstream out ("nextseq.out");
size_t n,aSz,bSz;
std::vector<int> set,a,b;
void readVector(std::vector<int> &v, size_t sz)
{
for (int i = 0; i < sz; ++i)
{
int t;
in >> t;
v.push_back(t);
}
}
void norm(std::vector<int> &v)
{
for(int i = 0; i < v.size(); i++ )
v[i]=(std::lower_bound(set.begin(), set.end(),v[i])-set.begin())+1;
}
bool isBigger(const std::vector<int> &a, const std::vector<int> &b)
{
if(aSz>bSz)return true;
if(aSz<bSz)return false;
for(int i = 0; i < aSz; ++i)
{
if(a[i]>b[i])return true;
if(a[i]<b[i])return false;
}
return true;
}
void subtr( std::vector<int> &a, const std::vector<int> &b)
{
for(int i = 0, l = b.size(); i < l; i++)
{
if(a[i]<b[i])
{
a[i+1]--;
a[i]+=n;
}
a[i]=a[i]-b[i];
}
for(int i = b.size(); i < a.size(); i++)
{
if(a[i]<0)
{
a[i]+=n;
a[i+1]--;
}
}
while(a.back()==0)
a.pop_back();
}
int convTo10(const std::vector<int> &nr)
{
int res = 0;
for(int i = nr.size()-1; i >= 0; i--)
res=res*n+nr[i];
return res;
}
int main()
{
in >> n >> aSz >> bSz;
readVector(set,n);
readVector(a,aSz);
readVector(b,bSz);
std::sort(set.begin(), set.end());
norm(a);
norm(b);
std::reverse(a.begin(), a.end());
std::reverse(b.begin(), b.end());
if(isBigger(a,b))
{
subtr(a,b);
int res = convTo10(a);
out << res-1;
}
else
{
subtr(b,a);
int res = convTo10(b);
out << res-1;
}
}