CodeForces 518C - Watto and Mechanism(模拟)

原创 2016年08月29日 23:30:22

题意:有n(1 <= n <= 10^5)个应用,每屏有k(1 <= k <= 10^5)个应用,现在有m(1 <= m <= 10^5)个操作,每次操作会使用一个应用(使用时需滑到应用所在的屏),使用后此应用与前边的相邻应用交换位置,退出此应用后会回到初始屏。问这m次操作总的滚动屏幕次数。


模拟即可。


#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<list>
typedef long long ll;
typedef unsigned long long llu;
const int MAXN = 100 + 10;
const int MAXT = 100000 + 10;
const int INF = 0x7f7f7f7f;
const double pi = acos(-1.0);
const double EPS = 1e-6;
using namespace std;

int n, m, k, a[MAXT], loc[MAXT][2];
vector<int> g[MAXT];



int main(){
    memset(loc, -1, sizeof loc);
    scanf("%d%d%d", &n, &m, &k);
    for(int i = 0; i < n; ++i)  scanf("%d", a + i);
    int lur = 0;
    for(int i = 0; i < n; ++i){
        int j;
        for(j = 0; j < k && i + j < n; ++j){
            g[lur].push_back(a[i + j]);
            loc[a[i + j]][0] = lur;
            loc[a[i + j]][1] = j;
        }
        ++lur;
        i = i + j - 1;
    }
    llu ans = 0;
    while(m--){
        scanf("%d", &lur);
        ans += (llu)(loc[lur][0] + 1);
        if(loc[lur][1] == 0){
            if(loc[lur][0]){
                int ll = loc[lur][0];
                int tmp = g[ll - 1][k - 1];
                loc[lur][0] = ll - 1;
                loc[lur][1] = k - 1;
                loc[tmp][0] = ll;
                loc[tmp][1] = 0;
                swap(g[ll - 1][k - 1], g[ll][0]);
            }
        }
        else{
            int r1 = loc[lur][0];
            int r2 = loc[lur][1];
            int tmp = g[r1][r2 - 1];
            loc[lur][1] = r2 - 1;
            loc[tmp][1] = r2;
            swap(g[r1][r2 - 1], g[r1][r2]);
        }
    }
    printf("%I64u\n", ans);
    return 0;
}


CodeForces 514B - Watto and Mechanism

这题看网上题解,都是相除然后什么暴力的,感觉没有必要。实际上就是计算每个点相当于炮塔的斜率,考虑到斜率是浮点数,因此可以把分数约分,然后比较有多少个这样不同的最简分数即可。刚开始用数组开的比较大内存超...
  • kun768
  • kun768
  • 2015年02月23日 09:01
  • 531

Codeforces 514C . Watto and Mechanism

C. Watto and Mechanism time limit per test3 seconds memory limit per test256 megabytes inputstand...
  • nare123
  • nare123
  • 2016年08月15日 20:57
  • 200

Watto and Mechanism CF581C(模拟水题)

点击打开链接 题意分析:          每k个软件在同一屏幕上,一共有n个软件,设要点开的手机软件当前位置为x,每次需要翻(x / k )页屏幕,                     并且点...
  • smwqd_yehua_cx
  • smwqd_yehua_cx
  • 2016年07月10日 00:34
  • 88

codeforces C. Watto and Mechanism 字典树

C. Watto and Mechanism time limit per test 3 seconds memory limit per test 256 megabytes...
  • suyuxuan94
  • suyuxuan94
  • 2015年02月16日 16:05
  • 235

【codeforces 514C】Watto and Mechanism(字符串hash)

【题目链接】:http://codeforces.com/contest/514/problem/C【题意】 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需...
  • harlow_cheng
  • harlow_cheng
  • 2017年04月12日 15:05
  • 179

Codeforces 514C Watto And Mechanism 哈希

题意:给出n个string,m次询问,判断string s是否和n个string中的某一个正好有一个位置不同. n,m 总的字符串长度不超过1e5 正好要有一个位置不同,因为不同字符在某个位置上只...
  • Jeremy1149
  • Jeremy1149
  • 2017年07月10日 11:08
  • 148

Codeforces 514C Watto and Mechanism (字典树+dfs)

题目链接:http://codeforces.com/problemset/problem/514/C 题意:给出n个模式串,给出m个字符串,问字符串能否通过变换一次成为模式串(必须变换) 思...
  • csdn364988181
  • csdn364988181
  • 2015年09月29日 19:25
  • 248

【codeforces 514C】Watto and Mechanism(字典树做法)

【题目链接】:http://codeforces.com/contest/514/my【题意】 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在n个...
  • harlow_cheng
  • harlow_cheng
  • 2017年04月12日 15:58
  • 288

字典树(+DFS)——Watto and Mechanism ( CodeForces 514C )

题目链接: http://codeforces.com/contest/514/problem/C 分析: 题目是先给出n个字符串和m个字符串,对于m个字符串中每一个字符串都可以在n个字符串中找到...
  • FeBr2
  • FeBr2
  • 2016年07月17日 11:00
  • 307

Watto and Mechanism CodeForces - 514C hash+枚举

题意:输入n个字符串,然后进行m次询问,每次询问输入一个字符串,问n个字符串中是否存在与当前输入的字符串长度相等,并且刚好有且仅有一个位置的字符不同。存在则输出YES,不存在输出NO。分析: 感觉好...
  • now_ing
  • now_ing
  • 2017年08月20日 11:09
  • 69
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeForces 518C - Watto and Mechanism(模拟)
举报原因:
原因补充:

(最多只允许输入30个字)