zoukankan      html  css  js  c++  java
  • It's All Squares【枚举计数】-2020杭电多校2

    题意:

    (n*m) 的棋盘,每个格子上有权值 (w_{i,j})(q) 次询问,每次给出起点,在边线上走出一个简单多边形,问多边形内部有多少个不同的权值。
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6771

    分析:

    代码:

    #include<bits/stdc++.h>
    #define pb push_back
    using namespace std;
    const int N=410;
    const int maxn=4e6+6;
    int w[N][N];
    int cnt[N*N];
    char ss[maxn];
    vector<int>num;
    int main()
    {
        int t,n,m,q;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&n,&m,&q);
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                    scanf("%d",&w[i][j]);
            }
            int x,y,ans;
            while(q--)
            {
                scanf("%d%d",&x,&y);
                scanf("%s",ss+1);
                int len=strlen(ss+1),it=1;
                ans=0;
                num.clear();
                while(it<=len)
                {
                    if(ss[it]=='L')//x-1
                    {
                        for(int i=1;i<=y;i++)
                        {
                            cnt[w[x][i]]--;
                            if(cnt[w[x][i]]==-1)
                            {
                                ans++;
                                num.pb(w[x][i]);
                            }
                            else if(cnt[w[x][i]]==0)
                                ans--;
                        }
                        x--;
                    }
                    else if(ss[it]=='R')//x+1
                    {
                        for(int i=1;i<=y;i++)
                        {
                            cnt[w[x+1][i]]++;
                            if(cnt[w[x+1][i]]==1)
                            {
                                ans++;
                                num.pb(w[x+1][i]);
                            }
                            else if(cnt[w[x+1][i]]==0)
                                ans--;
                        }
                        x++;
                    }
                    else if(ss[it]=='U') y++;
                    else y--;
                    it++;
                }
                for(int i=0;i<num.size();i++)
                    cnt[num[i]]=0;
                printf("%d
    ",ans);
            }
        }
        return 0;
    }
    
    

    参考博客:
    https://blog.csdn.net/qq_43202683/article/details/107548741

  • 相关阅读:
    小程序 scroll-view 中文字不换行问题
    模块
    网络编程
    元类
    day24
    day23
    day22
    day21
    day18
    day17
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/13419028.html
Copyright © 2011-2022 走看看