• Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)


    Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)

    这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊)。

    比赛传送门:http://codeforces.com/contest/1073

     

    A. Diverse Substring

     

    题意:给你个字符串,让你找一个子串满足任意一个字符的个数不超过其他字符的总和,输出yes或no表示否存在,如果存在输出任意一个。

    这题只要找两个不同的相邻字符,因为两个字符各一个都不超过其他字符的总和,如果字符串只由一个字符组成或长度等于一才会不存在。

     代码如下:

      

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
     6 #define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
     7 #define clr(x,y) memset(x, y, sizeof(x))
     8 #define mp(x, y) make_pair(x, y)
     9 #define all(x) begin(x), end(x)
    10 #define MAXN 1005
    11 #define fi first
    12 #define se second;
    13 #define Size(x) ((int)size(x))
    14 using namespace std;
    15 typedef long long LL;
    16 typedef vector<int> vi;
    17 typedef pair<int, int> pii;
    18 const int INF = 1 << 30;
    19 const int p = 10000007;
    20 //head by DYH
    21 
    22 char st[MAXN];
    23 
    24 int main(){
    25     int n;
    26     scanf("%d", &n);
    27     scanf("%s", st);
    28     int len = strlen(st);
    29     char ch = st[0];
    30     rep(i, 1, len - 1){
    31         if(st[i] != ch){
    32             puts("YES");
    33             printf("%c%c
    ", ch, st[i]);
    34             return 0;
    35         }
    36     }
    37     puts("NO");
    38     return 0;
    39 }
    View Code Problem-A

     

    B.Vasya and Books

    题意:有n本书在一个栈中,依次为a1, a2, …, an,现在有n个操作,对于每个操作i,将从栈顶到书本bi的所有书全部放入包中,如果已经在包中,就不进行操作。问你每次操作需要放几本书。

    这题可以记录下对于每本书i在栈中的位置posi,然后再记录上一次操作后放入包的书本数used,假如posb < used, 那么这次需要放入used - posbi 本书,否则就为0。

    代码如下:

     

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
     6 #define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
     7 #define clr(x,y) memset(x, y, sizeof(x))
     8 #define mp(x, y) make_pair(x, y)
     9 #define all(x) begin(x), end(x)
    10 #define MAXN 200005
    11 #define fi first
    12 #define se second;
    13 #define Size(x) ((int)size(x))
    14 using namespace std;
    15 typedef long long LL;
    16 typedef vector<int> vi;
    17 typedef pair<int, int> pii;
    18 const int INF = 1 << 30;
    19 const int p = 10000007;
    20 //head by DYH
    21 
    22 int id[MAXN];
    23 
    24 int main(){
    25     int n;
    26     scanf("%d", &n);
    27     rep(i, 1, n){
    28         int x;
    29         scanf("%d", &x);
    30         id[x] = i;
    31     }
    32     int used = 0;
    33     rep(i, 1, n){
    34         int x;
    35         scanf("%d", &x);
    36         if(id[x] > used){
    37             printf("%d ", id[x] - used);
    38             used = id[x];
    39         }
    40         else printf("0 ");
    41     }
    42     puts("");
    43     return 0;
    44 }
    View Code Problem-B

     

    C.Vasya and Robot

    题意:有一个机器人,有四种移动的操作。

    • U — move from (x,y)(x,y) to (x,y+1)(x,y+1);
    • D — move from (x,y)(x,y) to (x,y1)(x,y−1);
    • L — move from (x,y)(x,y) to (x1,y)(x−1,y);
    • R — move from (x,y)(x,y) to (x+1,y)(x+1,y).

    现在有一个由操作指令组成的字符串,让你修改一些操作,使得机器人从(0, 0)走到(x, y),并且maxID - minID + 1最小,即修改最小的长度的子串。如果怎么更改都无法到达,输出-1。

    这题用二分法和尺取法都可以做,也很好证明,就是在判断的时候有点麻烦。

    对于每一个[l, r]的区间,最简单的方法就是现将这段区间全部删去,求出此时机器人到达的点(x2, y2)。如果进行r - l + 1次操作就能到达(x, y),即abs(x2 - x) + abs(y2 - y) <= r - l + 1,前提是同奇偶。

    能否到达也无需另外判断,直接把答案的初值赋为-1即可。(然而我是一开始就判断的)

    代码如下:

     

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #define rep(x, l, r) for(int x = (int)l; x <= (int)r; x++)
     6 #define repd(x, r, l) for(int x = (int)r; x >= (int)l; x--)
     7 #define clr(x,y) memset(x, y, sizeof(x))
     8 #define mp(x, y) make_pair(x, y)
     9 #define all(x) begin(x), end(x)
    10 #define MAXN 200005
    11 #define fi first
    12 #define se second
    13 #define Size(x) ((int)size(x))
    14 using namespace std;
    15 typedef long long LL;
    16 typedef vector<int> vi;
    17 typedef pair<int, int> pii;
    18 const int INF = 1 << 30;
    19 const int p = 10000007;
    20 //head by DYH
    21 
    22 pii t, sum[MAXN];
    23 int len;
    24 char st[MAXN];
    25 
    26 bool judge(int l, int r){
    27     return abs(t.fi - (sum[len].fi - sum[r].fi + sum[l - 1].fi)) + abs(t.se - (sum[len].se - sum[r].se + sum[l - 1].se)) <= r - l + 1;
    28 }
    29 
    30 int main(){
    31     scanf("%d", &len);
    32     scanf("%s", st);
    33     rep(i, 1, len){
    34         if(st[i - 1] == 'U') sum[i].fi = sum[i - 1].fi, sum[i].se = sum[i - 1].se + 1;
    35         if(st[i - 1] == 'D') sum[i].fi = sum[i - 1].fi, sum[i].se = sum[i - 1].se - 1;
    36         if(st[i - 1] == 'L') sum[i].fi = sum[i - 1].fi - 1, sum[i].se = sum[i - 1].se;
    37         if(st[i - 1] == 'R') sum[i].fi = sum[i - 1].fi + 1, sum[i].se = sum[i - 1].se;
    38     }
    39     int x, y;
    40     scanf("%d%d", &x, &y);
    41     if(abs(x) + abs(y) > len || abs(abs(x) + abs(y) - len) & 1){
    42         puts("-1");
    43         return 0;
    44     }
    45     t = mp(x, y);
    46     int l = 1, r = 0, ans = INF;
    47     while(r <= len){
    48         while(judge(l, r)){
    49             ans = min(ans, r - l + 1);
    50             l++;
    51         }
    52         r++;
    53     }
    54     printf("%d
    ", ans);
    55     return 0;
    56 }
    View Code Problem-C

     

    D:Berland Fair

    题意:有n个摊位,在第i个摊位可以花费ai买到一个糖果。现在有一个人有m块钱,从摊位1出发,每到一个摊位如果当前的钱数大于ai,他就会买一个糖果,然后前往第i + 1个摊位(如果i == n,就到第1个摊位)。问你他会买多少颗糖果。(他会一直买直到在任何摊位都买不了糖果)

    这题看上去很麻烦(也许是我太弱了,大佬勿喷),其实只要判断

     

     

     

     

    noip结束,要搞文化课了……没空啊。

  • 相关阅读:
    一起学windows phone7开发(二十四. Task 补遗)
    一起学windows phone7开发(二十.一 正式版中新增的 Panorama 和 Pivot Project)
    一起学WP7 XNA游戏开发(四. Input)
    一起学WP7 XNA游戏开发(五. Sound)
    一起学windows phone7开发(二十一.三 Map 控件深入学习)
    Daisy.wp7.Controls自定义的控件库
    一起学windows phone7开发(二十二.使用系统资源)
    一起学习Windows Phone7开发(二十三 Windows Phone7 Toolkit 补遗)
    一起学windows phone7开发(二十一.一 Silverlight bing map控件与 Pone7 map控件的比较)
    第一次试验报告
  • 原文地址:https://www.cnblogs.com/nblyz2003/p/9909038.html
Copyright © 2020-2023  润新知