A
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <utility>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 10;
ll num[qq];
ll n, m, k;
string x = "Bulbbasaur";
int main(){
string str;
cin >> str;
int cnt = 0;
int id = 0;
for(int i = 0; i < (int)str.size(); ++i){
num[str[i]]++;
}
cnt = min({num['B'], num['u']/2, num['b'], num['l'], num['a']/2, num['s'], num['r']});
cout << cnt << endl;
return 0;
}
B
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <utility>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
const int qq = 1e5 + 5;
const int N = 1e5 + 5;
int num[qq];
int n, m, k;
int main(){
memset(num, 0, sizeof(num));
scanf("%d", &n);
int mx = 0;
for(int i = 0; i < n; ++i){
int c;
scanf("%d", &c);
mx = max(mx, c);
num[c]++;
}
int maxn = 1;
for(int i = 2; i <= 100000; ++i){
int cnt = 0;
for(int j = 1; j*i <= mx; ++j)
cnt += num[j*i];
maxn = max(maxn, cnt);
}
cout << maxn << endl;
return 0;
}
C
题意:n个体育馆, m种pokmen, 每个体育馆有gi个pokmen, 并给出每个精灵的种类, 问多少种进化表, 使得进化后的精灵在每个体育馆的数量和种类都相同.
思路: 用vector[i]记录每个种类的pokmen出现的位置, 然后对整个vector进行排序, 类似与字典序. 如果两个类型的pokmen可以互相进化, 那么意味着他们在每个体育馆的数量是相同的, 也就是说v[i] == v[i - 1]
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <utility>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
const int qq = 1e6 + 10;
const int MOD = 1e9 + 7;
ll num[qq];
ll n, m, k;
vector<int> v[qq];
int main(){
cin >> n >> m;
for(int i = 1; i <= n; ++i){
cin >> k;
for(int j = 0; j < k; ++j){
int x; cin >> x;
v[x].push_back(i);
}
}
sort(v + 1, v + 1 + m);
ll ans = 1;
ll count = 1;
for(int i = 2; i <= m; ++i){
if(v[i] == v[i-1]){
ans = (ans * (++count)) % MOD;
} else {
count = 1;
}
}
cout << ans << endl;
}