首页 > 其他分享 >The 2022 ICPC Asia Nanjing Regional Contest(A.Stop, Yesterday Please No More)

The 2022 ICPC Asia Nanjing Regional Contest(A.Stop, Yesterday Please No More)

时间:2023-08-26 19:44:40浏览次数:35  
标签:cout Contest int cin Regional Please ++ else --

模拟边界(不是袋鼠)移动,通过二维差分维护左上角和右下角,同时注意排除重复的点

#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;

const int N = 1e3 + 5;

int f[N][N];

int main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int T = 1; cin >> T;
    while(T--){
        int n, m, k; cin >> n >> m >> k;
        for(int i = 0; i <= n + 1; i++){
            for(int j = 0; j <= m + 1; j++){
                f[i][j] = 0;
            }
        }
        string s; cin >> s;
        map<pair<int, int>, int> vis;
        //模拟边界移动,而不是袋鼠
        int L = 1, R = m, U = 1, D = n;
        int l = L, r = R, u = U, d = D;
        for(int i = 0; i < (int)s.size(); i++){
            //所以这里是反的
            if(s[i] == 'U') u++, d++;
             else if(s[i] == 'D') u--, d--;
            else if(s[i] == 'L') l++, r++;
            else l--, r--;
            L = max(l, L);
            R = min(r, R);
            U = max(u, U);
            D = min(d, D);
        }
        if(D < U || R < L){
            if(k == 0) cout << n * m << endl;
            else cout << 0 << endl;
            continue;
        }
        auto get = [&](int x1, int y1, int x2, int y2){
            if(vis[{x1, y1}]) return;
            vis[{x1, y1}] = 1;
            f[x1][y1]++; f[x2 + 1][y2 + 1]++;
            f[x1][y2 + 1]--; f[x2 + 1][y1]--;
        };
        get(U, L, D, R);
        l = L, r = R, u = U, d = D;
        for(int i = 0; i < (int)s.size(); i++){
            if(s[i] == 'U') u--, d--;
             else if(s[i] == 'D') u++, d++;
            else if(s[i] == 'L') l--, r--;
            else l++, r++;
            get(u, l, d, r);
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                f[i][j] = f[i - 1][j] + f[i][j - 1] +f[i][j] - f[i - 1][j - 1];
            }
        }
        int ans = 0, cnt = (D - U + 1) * (R - L + 1);
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(cnt - f[i][j] == k) ans++;
            }
        }
        cout << ans << endl;
    }
    return 0;
}
View Code

 

标签:cout,Contest,int,cin,Regional,Please,++,else,--
From: https://www.cnblogs.com/zhujio/p/17659334.html

相关文章

  • AtCoder Beginner Contest 215
    [ABC215F]DistMax2 二分出min(|xi-xj|,|yi-yj|),双指针维护是否存在满足条件的点对(i,j),假如二分当前值是x,那么|xi-xj|>=x&&|yi-yj|>=x #include<bits/stdc++.h>usingnamespacestd;#defineendl"\n"typedeflonglongll;consti......
  • 暑假集训D24 2023.8.22 contest I
    C.CityFolding题意:有一个由\(2^n\)条等长线段组成的线,你可以进行\(n\)次对折,可以从左向右对折或从右向左对折,给出初始时线段的编号\(P\),问如何对折\(n\)次才能使对折后该线段恰好在从下往上数第\(H\)层?\(\operatorname{Solution}\)构造可以倒过来考虑这个......
  • 暑假集训D23 2023.8.21 contestH
    H.HardcoreHangman题意:现在有一个隐藏字符串,你可以进行最多\(7\)次询问,每次询问一个字符串,系统会回答这个字符串中所有字符的位置(从小到大依次).现在请你做出合理的询问,找出这个隐藏的字符串.\(\operatorname{Solution}\)......
  • AtCoder Beginner Contest 314
    A-3.14#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(0),cin.tie(0);strings="141592653589793238462643383279502884197169399375105820974944592307816406286208998628034......
  • AtCoder Beginner Contest 315
    A-tcdr#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){strings;cin>>s;for(autoi:s){if(i!='a'andi!='e'andi!='i'andi!='o'andi!='u�......
  • AtCoder Beginner Contest 287 - C (图论简单题)
    目录C-PathGraph?C-PathGraph?题意判断给定的无向简单图是不是一条链思路n个顶点m条边的无向图若为一条链,那么边数\(m=n-1\),n个顶点相互可达,任意一个顶点的度不超过2利用并查集判整体连通性,在建图时统计度数,最后判断即可由此,n个顶点,n-1条边的无向连通......
  • 本地nacos启动报错: Please set the JAVA_HOME variable in your environment, We nee
    编辑startup.cmd文件将模式从cluster改为standalone插入一行指定你的JAVA_HOME路径setJAVA_HOME="C:\dev_files\jdk17"然后启动nacos即可~......
  • The 2023 ICPC China Shaanxi Provincial Programming Contest
    链接:https://qoj.ac/contest/1290A表达式板子。\(O(|s|)\)。#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);strings;cin>>s;intn=s......
  • AtCoder Beginner Contest 315 - E (toposort)
    目录E-PrerequisitesE-Prerequisites题意n本书,序号1~n。给定阅读每本书之前必须要看的书的序号。请你输出任意一种看第一本书所需看书数量最少的方法思路利用拓扑序列先对书之间的制约关系建图,再利用bfs找到包含书本1的连通块,再对全图进行拓扑排序得到拓扑序列......
  • Atcoder Beginner Contest 315 D~G
    D题意:给定一个\(n\timesm\)的字符矩形,重复执行以下操作直到删除字符数为0:对于每一行,若有且仅有一种字符存在,且个数大于1,将这些字符标记对于每一列,若有且仅有一种字符存在,且个数大于1,将这些字符标记删除所有标记的字符求最后还能剩下多少字符。注意到每一行每一列最多被......