快捷搜索: 王者荣耀 脱发

【基础数学】计数原理

车的攻击

//用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;
}
经验分享 程序员 微信小程序 职场和发展