方方正正【規律 思維】
阿新 • • 發佈:2018-10-31
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2295
給你r行 c列 r個行的和 c個列的和 矩陣只能0 1 組成
問在所給的資訊這樣的矩陣能不能存在
思路:很容易想到 所有行之和 若不等於 所有列之和 不行
還有因為只有0 1 組成 所以當我們知道一行的和設k 我們可以知道有多少列(即=k)
利用這個資訊 我們現在也知道每一列的和 通過這個我們可以大概求到有效列有多少(即列和 > 0)的個數realc
為什麼說大概呢 因為我們並不能做到精確到某一行的每一列的有效就是 realc
然後同理列也一樣
所以三個條件是行的 所有行之和 等於 所有列之和 或 所有行和都小於等於realc 或所有列和都小於等於realr
收穫:所有行 所有列 那是不是隻用看最大那個滿不滿足 滿足 那小於最大值肯定也行
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int main() { int r, c; while (~scanf("%d%d", &r, &c)) { int sumr, sumc, rmax, cmax; int realr, realc; realr = r, realc = c; sumr = sumc = 0, rmax = cmax = -1; int num; for (int i = 0; i < r; ++i) { scanf("%d", &num); sumr += num; rmax = max(rmax, num); if (!num) realr--; } for (int i = 0; i < c; ++i) { scanf("%d", &num); sumc += num; cmax = max(cmax, num); if (!num) realc--; } if (sumr != sumc || rmax > realc || cmax > realr) puts("NO"); else puts("YES"); } return 0; }