2 条题解

  • 2
    @ 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;
    }
    
    • 1
      @ 2023-4-27 21:34:59
      #include<bits/stdc++.h>
      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;
      }
      
      • 1

      信息

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