车的攻击题目描述
//用set只能得50分,因为当k很大时,insert()会导致超时
#include<iostream>
#include<set>
using namespace std;
int main() {
int n, k, r, c;
set <int> s1, s2;
cin >> n >> k;
for(int i = 0; i < k; i++) {
cin >> r >> c;
s1.insert(r);
s2.insert(c);
}
cout << n * (s1.size() + s2.size()) - s1.size() * s2.size() << endl;
return 0;
}
//用sort和unique可以得100分
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e6 + 5;
#define ll long long
int a[MAXN], b[MAXN];
int main() {
int n, k;
cin >> n >> k;
for(int i = 0; i < k; i++) cin >> a[i] >> b[i];
sort(a, a + k);
sort(b, b + k);
ll sizea = unique(a, a + k) - a; //类型为ll,若为int会报错
ll sizeb = unique(b, b + k) - b;
cout << (sizea + sizeb) * n - sizea * sizeb << endl;
return 0;
}
组合数公式代码:
int zu(int m, int n) {
if(m == 0) return 1;
int mut = 1;
for(int i = n; i > n - m; i--) mut *= i;
for(int i = m; i > 1; i--) mut /= i;
return mut;
}