题目大意是: Anya 买了一个使用Berdroid 操作系统的智能手机, 智能手机的菜单有n个应用(每个应用都有自己的图标), 每个界面最多能容纳k个图标. 初始化的菜单在第一个界面上, 为了打开在界面i上的应用, 需要i次操作. 在此之后呢, 这个app的图标将前移, menu 将会再一次被初始化.
给出n, k, 还有一个app序列, 问依次打开这些app需要多少次操作.
用一个数组来记录每个位置上的应用.
用一个map来记录应用的位置.
然后直接模拟即可.
代码:
#include<cstdio>
#include<map>
using namespace std;
map<int, int> app_p;
int pos[100001];
long long ans = 0;
int main()
{
int n, m, k, a, tmp, p, b;
scanf("%d%d%d", &n, &m, &k);
for ( int i = 1; i <= n; i ++ )
{
scanf("%d", pos + i);
app_p[pos[i]] = i;
}
while ( m -- )
{
scanf("%d", &a);
p = app_p[a];
ans += (long long)p / k;
if ( p % k != 0 ) ans ++;
if ( p != 1 )
{
tmp = pos[p-1];
app_p[tmp] = p;
app_p[a] = p-1;
pos[p] = tmp;
pos[p-1] = a;
}
}
printf("%I64d\n", ans);
return 0;
}