problemscpp
A collection of my answers to algorithm problems in c++.
函数
pat::b::b1068 命名空间参考

1068 万绿丛中一点红 更多...

函数

int main (istream &cin, ostream &cout)
 
 TEST (b1068, case1)
 
 TEST (b1068, case2)
 
 TEST (b1068, case3)
 

详细描述

1068 万绿丛中一点红

函数说明

◆ main()

int pat::b::b1068::main ( istream &  cin,
ostream &  cout 
)

在文件 pat.cpp2336 行定义.

2336 {
2337 long m;
2338 long n;
2339 long tol;
2340 cin >> m >> n >> tol;
2341 vector grid(n, vector<long>(m));
2342 unordered_map<long, unsigned long> um_cnt;
2343 unordered_map<long, long> um_x;
2344 unordered_map<long, long> um_y;
2345 for(int i = 0; i < n; i++) {
2346 for(int j = 0; j < m; j++) {
2347 cin >> grid[i][j];
2348 um_cnt[grid[i][j]]++;
2349 um_x[grid[i][j]] = i;
2350 um_y[grid[i][j]] = j;
2351 }
2352 }
2353 long ans_x;
2354 long ans_y;
2355 long ans_v;
2356 bool has_ans = false;
2357 for(auto [v, cnt]: um_cnt) {
2358 if(cnt == 1) {
2359 long x = um_x[v];
2360 long y = um_y[v];
2361 pair<long, long> surroundings[8] = {make_pair(x - 1, y - 1), make_pair(x - 1, y), make_pair(x - 1, y + 1),
2362 make_pair(x, y - 1), make_pair(x, y + 1),
2363 make_pair(x + 1, y - 1), make_pair(x + 1, y), make_pair(x + 1, y + 1)};
2364 bool flag = true;
2365 for(auto [s_x, s_y]: surroundings) {
2366 if(s_x >= 0 && s_x < n && s_y >= 0 && s_y < m) {
2367 const long dist = abs(v - grid[s_x][s_y]);
2368 if(dist <= tol) {
2369 flag = false;
2370 break;
2371 }
2372 }
2373 }
2374 if(flag) {
2375 if(!has_ans) {
2376 ans_x = x + 1;
2377 ans_y = y + 1;
2378 ans_v = v;
2379 has_ans = true;
2380 } else {
2381 cout << "Not Unique";
2382 return 0;
2383 }
2384 }
2385 }
2386 }
2387 if(has_ans) {
2388 cout << '(' << ans_y << ", " << ans_x << "): " << ans_v;
2389 } else {
2390 cout << "Not Exist";
2391 }
2392 return 0;
2393 }

被这些函数引用 TEST().

◆ TEST() [1/3]

pat::b::b1068::TEST ( b1068  ,
case1   
)

在文件 pat_test.cpp1057 行定义.

1057 {
1058 istringstream in("8 6 200\n"
1059 "0 \t 0 \t 0 \t 0\t 0 \t 0 \t 0 0\n"
1060 "65280 \t 65280 65280 16711479 65280 65280 65280 65280\n"
1061 "16711479 65280 65280 65280 16711680 65280 65280 65280\n"
1062 "65280 \t 65280 65280 65280 65280 65280 165280 165280\n"
1063 "65280 \t 65280 \t 16777015 65280 65280 165280 65480 165280\n"
1064 "16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215");
1065 auto out = ostringstream();
1066 main(in, out);
1067 const auto ans = out.str();
1068 ASSERT_EQ("(5, 3): 16711680", out.str());
1069 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/3]

pat::b::b1068::TEST ( b1068  ,
case2   
)

在文件 pat_test.cpp1071 行定义.

1071 {
1072 istringstream in("4 5 2\n"
1073 "0 0 0 0\n"
1074 "0 0 3 0\n"
1075 "0 0 0 0\n"
1076 "0 5 0 0\n"
1077 "0 0 0 0");
1078 auto out = ostringstream();
1079 main(in, out);
1080 const auto ans = out.str();
1081 ASSERT_EQ("Not Unique", out.str());
1082 }

引用了 main().

◆ TEST() [3/3]

pat::b::b1068::TEST ( b1068  ,
case3   
)

在文件 pat_test.cpp1084 行定义.

1084 {
1085 istringstream in("3 3 5\n"
1086 "1 2 3\n"
1087 "3 4 5\n"
1088 "5 6 7");
1089 auto out = ostringstream();
1090 main(in, out);
1091 const auto ans = out.str();
1092 ASSERT_EQ("Not Exist", out.str());
1093 }

引用了 main().