4 条题解

  • 0
    @ 2023-5-2 20:16:23
    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    const int n = 5;
    char a[n][n];
    char g[n][n];
    void click(int x,int y)
    {
    	if(x>0)
    		a[x-1][y] ^=1;
    	if(y>0)
    		a[x][y-1] ^=1;
    	if(x<4)
    		a[x+1][y] ^=1;
    	if(y<4)
    		a[x][y+1] ^=1;
    	a[x][y] ^= 1;
    }
    int read()
    {
    	char c;
    	c = getchar();
    	int ans = 0;
    	while(c>='0'&&c<='9')
    	{
    		ans = ans*10+ (c-'0');
    		c = getchar();
    	}
    
    	return ans;
    }
    int main()
    {
    	int m;
    	cin>>m;
    	while(m--)
    	{
    		for(int i=0;i<5;i++)
    			cin>>a[i];
    		memcpy(g,a,sizeof(a));
    		int minn = 30;
    		for(int i=0;i<32;i++)
    		{
    			int ans = 0;
    			for(int j=0;j<5;j++)
    				if(i&(1<<j))
    				{
    					click(0,j);
    					ans++;
    				}
    			for(int j=0;j<4;j++)
    			{
    				for(int k=0;k<5;k++)
    				{
    					if(a[j][k] == '0')
    					{
    						click(j+1,k);
    						ans++;
    					}
    				}
    			}
    			bool flag = true;
    			for(int j=0;j<5;j++)
    			{
    				if(a[4][j] == '0')
    				{
    					flag = false;
    					break ;
    				}
    			}
    			if(flag)
    				minn = min(minn,ans);
    			memcpy(a,g,sizeof(a));
    
    		}
    		if(minn > 6)
    			cout<<-1<<endl;
    		else
    			cout<<minn<<endl;
    	}
    	return 0;
    }
    

    信息

    ID
    8
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    299
    已通过
    181
    上传者