您的位置:首页 > 运维架构

Codeforces 665B - Shopping

2016-04-27 23:57 399 查看
这道题太直白了,直接用双端队列就解决了。意思是,n个人,每个人要取m个东西,当一个人拿了一件东西后,这件东西就会放在队列最前面,问总共要花的时间。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>

using namespace std;
typedef deque<int>::iterator iterator_t;

int main()
{
deque<int> que;
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int tmp;
for (int i = 0; i != k; ++i)
{
scanf("%d", &tmp);
que.push_back(tmp);
}
int tot_time = 0;
int val;
for (int i = 0; i != n; ++i)
{
for (int j = 0; j != m; ++j)
{
scanf("%d", &val);
for (iterator_t it = que.begin(); it != que.end(); ++it)
{
tot_time++;
if (*it == val)
{
//printf("first %d\n", que.size());
que.erase(it);
que.push_front(val);
// for (int i = 0; i < que.size(); ++i)
//{
//  printf("%d ", que[i]);
//}
//puts("");
break;
}
}
}
}
printf("%d\n", tot_time);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: