• 【题解】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; 
    }
    
  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/sdltf/p/12456858.html
Copyright © 2020-2023  润新知