zoukankan      html  css  js  c++  java
  • 【题解】LuoguP1789 插火把

    一开始这个题目我用模拟做,这个样子:

    #include <iostream>
    using namespace std;
    bool light[101][101];
    int main(){
        ios::sync_with_stdio(false);
        int n,m,k,x,y,count=0;
        cin >> n >> m >> k;
        for(int i = 0;i < m;i ++){
            cin >> x >> y;
            light[x][y] = 1;
            if(x+1<=n&&y+1<=n)light[x+1][y+1] = 1;
            if(x-1>=1&&y-1>=1)light[x-1][y-1] = 1;
            if(x+1<=n&&y-1>=1)light[x+1][y-1] = 1;
            if(x-1>=1&&y+1<=n)light[x-1][y+1] = 1;
            if(x+1<=n)light[x+1][y] = 1;
            if(x+2<=n)light[x+2][y] = 1;
            if(x-1>=1)light[x-1][y] = 1;
            if(x-2>=1)light[x-2][y] = 1;
            if(y+2<=n)light[x][y+2] = 1;
            if(y+1<=n)light[x][y+1] = 1;
            if(y-1>=1)light[x][y-1] = 1;
            if(y-2>=1)light[x][y-2] = 1;
        }
        for(int i = 0;i < k;i ++){
            cin >> x >> y;
            for(int j = x;j <= x+5;j ++)for(int k1 = y;k1 <= 5+y;k ++)if(j<=n&&k1<=n)
    			light[j][k1]=1;
        }
        for(int j = 1;j <= n;j ++)for(int k1 = 1;k1 <= n;k1 ++){
            if(!light[j][k1]) count++;
        }
        cout << count; 
    }
    

    好极了,完美输出,结果......

    能不能快一点?我把&&换成了&,结果......

    没办法,那就来个记忆化:

    #include <iostream>
    using namespace std;
    bool light[101][101];
    int main(){
        int n,m,k,x,y,count=0;
        cin >> n >> m >> k;
        count = n*n ;
        for(int i = 0;i < m;i ++){
            cin >> x >> y;
            light[x][y] = 1;
            if(x+1<=n&&y+1<=n){
    			if(!light[x+1][y+1]){
    				count -- ;
    				light[x+1][y+1] = 1;
    			}
    		}
            if(x-1>=1&&y-1>=1){
            	if(!light[x-1][y-1]){
            		count --;
            		light[x-1][y-1] = 1;
    			}
    		}
            if(x+1<=n&&y-1>=1){
            	if(!light[x+1][y-1]){
    				count--;
    				light[x+1][y-1] = 1;
    			}
    		}
            if(x-1>=1&&y+1<=n){
            	if(!light[x-1][y+1]){
    				count--; 
            		light[x-1][y+1] = 1;
    			}
    		}
            if(x+1<=n){
            	if(!light[x+1][y]){
            		count--;	
    				light[x+1][y] = 1;
    			}  
    		}
            if(x+2<=n){
            	if(!light[x+2][y]){
            		count--;
    				light[x+2][y] = 1;
    			}
    		}
            if(x-1>=1){
            	if(!light[x-1][y]){
            		count --;
            		light[x-1][y] = 1;
    			}        	
    		}
            if(x-2>=1){
            	if(!light[x-2][y]){
    				count --;
    				light[x-1][y] = 1; 
    			} 
    		}
            if(y+2<=n){
            	if(!light[x][y+2]){
            		count --;
            		light[x][y+2] = 1;
    			}
    		}
            if(y+1<=n){
            	if(!light[x][y+1]){
            		count --;
            		light[x][y+1] = 1;
    			}
    		}
            if(y-1>=1){
            	if(!light[x][y-1]){
            		count --;
            		light[x][y-1] = 1;
    			}
    		}
            if(y-2>=1){
            	if(!light[x][y-2]){
            		count --;
            		light[x][y-1] = 1;
    			}
    		}
        }
        for(int i = 0;i < k;i ++){
            cin >> x >> y;
            for(int j = x;j <= x+5;j ++)for(int k1 = y;k1 <= 5+y;k ++)if(j<=n&&k1<=n)
            	if(!light[j][k1]){
            		count --;
            		light[j][k1] = 1;
    			}
        }
        cout << count-1; 
    }
    
  • 相关阅读:
    C#获取网上图片的宽高代码
    发现两个有趣的CSS3效果
    .NET WinForm画树叶小程序
    生产环境使用 pt-table-checksum 检查MySQL数据一致性【转】
    awk入门【转】
    MySQL数据库之auto_increment【转】
    crontab的使用方法
    linux添加swap分区【转】
    nginx反向代理转发后页面上的js css文件无法加载【原创】
    Serv-U日志文件保存设置【转】
  • 原文地址:https://www.cnblogs.com/sdltf/p/12456858.html
Copyright © 2011-2022 走看看