求调
查看原帖
求调
285414
Swiftie_wyc22楼主2022/12/18 08:54

思路是一行一行扫,每一行枚举列。map的思路是一个pair对应一个tuple:pair是两个字符串;tuple是记录的行、第一个列、第二个列,一共三个元素。

样例已过,提交便wa,求调。谢谢!

#include <bits/stdc++.h>
#define rep(i, s, n, c) for (register int i = s; i <= n; i+=c)

using namespace std;

map<pair<string, string>, tuple<int, int, int> > marks;
int n, m;
string mp[10005][15];

int main()
{
	while (~scanf("%d%d", &n, &m)) {getchar(); marks.clear();
		rep (i, 1, n, 1) {
			rep (j, 1, m - 1, 1) {
				getline(cin, mp[i][j], ',');
				
			}
			getline(cin, mp[i][m], '\n');
			// rep (j, 1, m, 1) {
				// cout << mp[i][j];
			// }printf("\n");
		}
		// rep (i, 1, n, 1) {
			// rep (j, 1, m, 1) {
				// cout << mp[i][j] << ",";
			// }printf("\n");
		// }
		bool flag = true;
		rep (i, 1, n, 1) {
			rep (x1, 1, m, 1) {
				rep (x2, x1 + 1, m, 1) {
					if (x1 == x2) continue;
					// cout << endl << mp[i][x1] << ", " << mp[i][x2] << endl;
					
					pair<string, string> p = make_pair(mp[i][x1], mp[i][x2]);
					tuple<int, int, int> t = make_tuple(i, x1, x2);
					
					int r, c1, c2;
					tie(r, c1, c2) = marks[p];
					if (c1 == x1 && c2 == x2) {
						printf("NO\n");
						printf("%d %d\n%d %d\n", r, i, c1, x2);
						flag = false;
						break;
					}
					marks[p] = t;
				}
				if (!flag) break;
			}
			if (!flag) break;
		}
		if (!flag) continue;
		printf("YES\n");
	}
    return 0;
}
2022/12/18 08:54
加载中...