30分求调!!!
查看原帖
30分求调!!!
1297705
Ken369楼主2025/7/22 17:34

不知道为什么只得了30分

#include <bits/stdc++.h>
using namespace std;
int a[1001][1001];
char b[1001][1001];

int main () {
    int n, m;
    cin >> n >> m;

    for (int i = 0; i < n; i++) 
	{
        for (int j = 0; j < m; j++) 
		{
            cin >> b[i][j];
        }
    }

    for (int i = 0; i < n; i++) 
	{
        for (int j = 0; j < m; j++) 
		{
            if (b[i][j] == '#') 
			{
                /*if (i != 0 && i != n - 1 && j != 0 && j != m - 1) 
				{
                    a[i][j] = 4;
                } 
				else if ((i == 0 || i == n - 1) && (j != 0 || j != m - 1)) 
				{
                    a[i][j] = 3;
                } 
				else if ((j == 0 || j == m - 1) && (i != 0 || i != n - 1)) 
				{
                    a[i][j] = 3;
                } 
				else 
				{
                    a[i][j] = 2;
                }*/
                if(i == 0)
                {
                	if((j == 0) || (j == m -1))
                	{
                		a[i][j] = 2;
					}
					else
					{
						a[i][j] = 3;
					}
				}
				else if(i == n - 1)
				{
					if((j == 0) || (j == m - 1))
                	{
                		a[i][j] = 2;
					}
					else
					{
						a[i][j] = 3;
					}
				}
				else
				{
					if((j ==0) || (j == m - 1))
					{
						a[i][j] = 3;
					}
					else
					{
						a[i][j] = 4;
					}
				}
            } 
			else 
			{
                a[i][j] = 1;
            }
        }
    }

    int sum = 0;
    int flag = a[0][0];
    int x, y;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (a[i][j] > flag) {
                flag = a[i][j];
                x = i;
                y = j;
            }
        }
    }
    a[x][y] = 1;
    
    // debug
    /*for (int i = 0; i < n; i++)
	{
        for (int j = 0; j < m; j++)
		{
        	cout << a[i][j]; 
    	}
        
		cout << endl;
    }*/

    for (int i = 0; i < n; i++) 
	{
        for (int j = 0; j < m; j++)
		{
            if (a[i][j] == 4) 
			{
                a[i][j] = 0;
                a[i][j - 1] = 0;
                a[i - 1][j] = 0;
                
                // 未处理的要注意,可能不是1,如果不是1,是不能置0的
                if(a[i][j + 1] == 1)
                {
                	a[i][j + 1] = 0;
				}
                
                if(a[i + 1][j] == 1)
                {
                	a[i + 1][j] = 0;
				}
            } 
			else if (a[i][j] == 3) 
			{
				// 分别讨论在什么位置 
				/*a[i][j] = 0;
                a[i][j - 1] = 0;
                a[i][j + 1] = 0;
                a[i + 1][j] = 0;
                a[i - 1][j] = 0;*/
                if(i == 0)
                {
                	a[i][j] = 0;
                	a[i][j - 1] = 0;
                	
                	// 未处理的要注意,可能不是1,如果不是1,是不能置0的
					if(a[i][j + 1] == 1)
					{
						a[i][j + 1] = 0;
					}
                	
                	if(a[i + 1][j] == 1)
                	{
                		a[i + 1][j] = 0;
					}                	
				}
				else if(i == n - 1)
				{
                	a[i][j] = 0;
                	a[i][j - 1] = 0;
                	a[i - 1][j] = 0;
					
					// 未处理的要注意,可能不是1,如果不是1,是不能置0的
					if(a[i][j + 1] == 1)
					{
						a[i][j + 1] = 0;
					}										
				}
				else if(j == 0)
				{
                	a[i][j] = 0;
                	a[i - 1][j] = 0;
                	
                	// 未处理的要注意,可能不是1,如果不是1,是不能置0的
                	if(a[i + 1][j] == 1)
                	{
                		a[i + 1][j] = 0;
					}
					
					if(a[i][j + 1] == 1)
					{
						a[i][j + 1] = 0;
					}                				
				}
				else if(j == m - 1)
				{
                	a[i][j] = 0;
                	a[i - 1][j] = 0;
                	a[i][j - 1] = 0;	
					
					// 未处理的要注意,可能不是1,如果不是1,是不能置0的
					if(a[i + 1][j] == 1)
					{
						a[i + 1][j] = 0;
					}												
				}
            } 
			else if (a[i][j] == 2) 
			{
				// 分别讨论在什么位置 
                /*a[i][j] = 0;
                a[i][j - 1] = 0;
                a[i][j + 1] = 0;
                a[i + 1][j] = 0;
                a[i - 1][j] = 0;*/
                if((i == 0) && (j == 0))
                {
                	a[i][j] = 0;
                	
                	// 未处理的要注意,可能不是1,如果不是1,是不能置0的
                	if(a[i][j + 1] == 1)
					{
						a[i][j + 1] = 0;
					} 
                	
                	if(a[i + 1][j] == 1)
                	{
                		a[i + 1][j] = 0;
					}                	
				}
				if((i == 0) && (j == m - 1))
                {
                	a[i][j] = 0;
                	a[i][j - 1] = 0;
                	
                	// 未处理的要注意,可能不是1,如果不是1,是不能置0的
                	if(a[i + 1][j] == 1)
                	{
                		a[i + 1][j] = 0;
					}                	
				}
				if((i == n - 1) && (j == 0))
                {
                	a[i][j] = 0;
                	a[i - 1][j] = 0;
                	
                	// 未处理的要注意,可能不是1,如果不是1,是不能置0的
                	if(a[i][j + 1] == 1)
                	{
                		a[i][j + 1] = 0;
					}
				}
				if((i == n - 1) && (j == m - 1))
                {
                	a[i][j] = 0;
                	a[i][j - 1] = 0;
                	a[i - 1][j] = 0;
				}
            } 
        }
    }
    
    // debug
    /*cout << endl;
    for (int i = 0; i < n; i++)
	{
        for (int j = 0; j < m; j++)
		{
        	cout << a[i][j]; 
    	}
        
		cout << endl;
    }*/

    for (int i = 0; i < n; i++) 
	{
        for (int j = 0; j < m; j++) 
		{
            sum += a[i][j];
            //cout << a[i][j];
        }
        //cout <<endl;
    }

    cout << sum << endl;
    return 0;
}
2025/7/22 17:34
加载中...