1 条题解

  • 0
    @ 2025-5-6 20:08:57

    解题思路

    1. 输入处理
      • 使用 while 循环读取输入的矩阵大小 n,当 n 为 0 时结束循环。
      • 初始化字符矩阵 grid 为全 0。
      • 读取 n 组数据,每组数据包含一个字符 c 和两个坐标 xy,将字符存储到矩阵 grid 的对应位置。
    2. 寻找矩形
      • 遍历矩阵的每一行 line(从 0 到 50)。
      • 对于当前行,遍历该行的每个位置 i。如果 grid[line][i] 不为 0,再遍历该行 i 之后的位置 j
      • 对于每一对 ij,遍历 line 之后的行 nextline(从 line + 1 到 50)。如果 grid[nextline][i]grid[nextline][j] 都不为 0,则表示找到了一个矩形。
      • 将矩形的四个字符组合成一个字符串 t,并插入到集合 res 中。
    3. 输出结果
      • 输出当前点集的编号和冒号。
      • 如果集合 res 的大小大于 0,遍历集合 res,输出每个矩形的字符组合。每输出 10 个组合后换行。
      • 如果集合 res 的大小为 0,输出 “ No rectangles”。
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<set>
    
    using namespace std;
    
    struct point{
    	int x,y;
    }pp;
    
    char grid[51][51];
    int n;
    
    int main(){
    	int nc = 1;
    	while(cin>>n&&n){
    		set<string> res;
    		memset(grid,0,sizeof(grid));
    		char c;
    		int x,y;
    		for(int i = 0; i < n; i++){
    			cin >> c >> x >> y;
    			grid[x][y] = c;
    		}
    		for(int line = 0; line <= 50; line++){
    			for(int i = 0; i <= 50; i++)
    				if(grid[line][i]>0){
    				for(int j = i+1; j <= 50; j++)
    					if(grid[line][j]){
    					for(int nextline = line+1; nextline<=50; nextline++)
    						if(grid[nextline][i]&&grid[nextline][j]){
    						string t;
    						t.push_back(grid[line][j]);
    						t.push_back(grid[nextline][j]);
    						t.push_back(grid[nextline][i]);
    						t.push_back(grid[line][i]);
    						res.insert(t);
    					}
    				}
    			}
    		}
    		cout << "Point set " << nc++ <<":";
    		if(res.size()>0){
    			cout << endl;
    			int num = res.size(), i = 1;
    			for(set<string>::iterator it = res.begin(); it!=res.end(); i++,it++){
    				cout << " " << *it;
    				if(i%10==0)
    					cout <<endl;
    			}
    			
    			if(i%10!=1) cout << endl;
    		}
    		else
    			cout << " No rectangles" << endl;
    	}
    }
    
    • 1

    信息

    ID
    315
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者