zoukankan      html  css  js  c++  java
  • 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage (Online Mirror, ACM-ICPC Rules, Teams Preferred) I. Noise Level

    题意:一个n*m的矩阵,每个小矩阵,如果是'*'代表噪音无法路过且无法污染,如果是字母,则为-'A'+1)*q的污染强度,可以向其他矩阵进行污染,依次/2,(污染路径取最短的

    思路:bfs+剪枝,最大的最初污染为26*1000000,那么最多跑log(26*1000000)个格子

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n,m,q,p;
     5 char s[300][300];
     6 int a[300][300];
     7 int vis[300][300];
     8 int b[5][2]={{0,1},{0,-1},{-1,0},{1,0}};
     9 
    10 struct node{
    11     int x,y;
    12     int flag;
    13     int vv;
    14     node(int xx,int yy,int zz,int vvv) {
    15         x=xx;y=yy;flag=zz;vv=vvv;
    16     }
    17     friend bool operator <(node pp,node qq){
    18         return pp.flag<qq.flag;
    19     }
    20 };
    21 bool check(int xx,int yy){
    22     if(xx<1||xx>n||yy<1||yy>m) return true;
    23     return false;
    24 }
    25 void dfs(int x,int y,int val){
    26     queue<node>pp;
    27     //cout<<x<<" "<<y<<endl;
    28     while(!pp.empty()) pp.pop();
    29     pp.push(node(x,y,0,val));
    30    for(int i=max(1,x-40);i<=min(n,(x+40));i++)
    31     for(int j=max(1,y-40);j<=min(m,(y+40));j++) vis[i][j]=0;
    32     while(!pp.empty()){
    33         node tou=pp.front();
    34         pp.pop();
    35         if(vis[tou.x][tou.y]) continue;
    36         vis[tou.x][tou.y]=1;
    37         a[tou.x][tou.y]+=tou.vv;
    38         for(int i=0;i<4;i++){
    39             int xx=b[i][0]+tou.x;
    40             int yy=b[i][1]+tou.y;
    41             if(check(xx,yy)||vis[xx][yy]||s[xx][yy]=='*'||tou.vv==0) continue;
    42 
    43             //cout<<xx<<" "<<yy<<" "<<tou.vv/2<<" "<<vis[xx][yy]<<endl;
    44             pp.push(node(xx,yy,tou.flag+1,tou.vv/2));
    45         }
    46        // cout<<"@"<<endl;
    47     }
    48   // cout<<endl;
    49 }
    50 int main(){
    51     scanf("%d%d%d%d",&n,&m,&q,&p);
    52     for(int i=1;i<=n;i++){
    53         scanf("%s",s[i]+1);
    54     }
    55     for(int i=1;i<=n;i++)
    56     for(int j=1;j<=m;j++)
    57     if(s[i][j]>='A'&&s[i][j]<='Z') {
    58         int x=(s[i][j]-'A'+1)*q;
    59         dfs(i,j,x);
    60     }
    61     int sum=0;
    62     for(int i=1;i<=n;i++)
    63     for(int j=1;j<=m;j++){
    64         if(a[i][j]>p) sum++;
    65     }
    66     cout<<sum<<endl;
    67 }
    #include<bits/stdc++.h>usingnamespace std;int n,m,q,p;char s[300][300];int a[300][300];int vis[300][300];int b[5][2]={{0,1},{0,-1},{-1,0},{1,0}};struct node{int x,y;int flag;int vv;
        node(int xx,int yy,int zz,int vvv){
            x=xx;y=yy;flag=zz;vv=vvv;}friendbooloperator<(node pp,node qq){return pp.flag<qq.flag;}};bool check(int xx,int yy){if(xx<1||xx>n||yy<1||yy>m)returntrue;returnfalse;}void dfs(int x,int y,int val){queue<node>pp;//cout<<x<<" "<<y<<endl;while(!pp.empty()) pp.pop();
        pp.push(node(x,y,0,val));for(int i=max(1,x-40);i<=min(n,(x+40));i++)for(int j=max(1,y-40);j<=min(m,(y+40));j++) vis[i][j]=0;while(!pp.empty()){
            node tou=pp.front();
            pp.pop();if(vis[tou.x][tou.y])continue;
            vis[tou.x][tou.y]=1;
            a[tou.x][tou.y]+=tou.vv;for(int i=0;i<4;i++){int xx=b[i][0]+tou.x;int yy=b[i][1]+tou.y;if(check(xx,yy)||vis[xx][yy]||s[xx][yy]=='*'||tou.vv==0)continue;//cout<<xx<<" "<<yy<<" "<<tou.vv/2<<" "<<vis[xx][yy]<<endl;
                pp.push(node(xx,yy,tou.flag+1,tou.vv/2));}// cout<<"@"<<endl;}// cout<<endl;}int main(){
        scanf("%d%d%d%d",&n,&m,&q,&p);for(int i=1;i<=n;i++){
            scanf("%s",s[i]+1);}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(s[i][j]>='A'&&s[i][j]<='Z'){int x=(s[i][j]-'A'+1)*q;
            dfs(i,j,x);}int sum=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(a[i][j]>p) sum++;}
        cout<<sum<<endl;}
  • 相关阅读:
    软考解析:2014年上半年下午试题
    软考解析:2014年下半年下午试题
    软考解析:2015年下半年下午试卷
    软考解析:2015年上半年下午试卷
    怎样完善和推广自己的理论模型?
    怎样完善和推广自己的理论模型?
    Android开发——常见的内存泄漏以及解决方案(一)
    聊聊Android5.0中的水波纹效果
    JVM——自定义类加载器
    JVM——Java类加载机制总结
  • 原文地址:https://www.cnblogs.com/hhxj/p/7563181.html
Copyright © 2011-2022 走看看