电影院的座位分配为成年人的座位为奇数,非成年人的座位为偶数。现在输入一个N代表人数,依次输入N个有人的座位号,判断成年人有几个,所占比例是多少(保留小数点后两位),非成年人有几个,所占比例是多少(保留小数点后两位)。
code
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pi 3.1415927
#define double long double
#define x first
#define y second
const int N = 2e5 + 10;
double eps= 1e-8;
ll f[N + 5];
int p[N];
/*
每次找到离u较近的点进行更新
*/
int find(int x){
if(x != p[x]) p[x] = find(p[x]);
return p[x];
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int n,m = 0,k = 0;
cin >> n;
for(int i = 0; i < n; i ++){
int x;
cin >> x;
if(x % 2) m ++;
else k ++;
}
cout << m << " " << 1. * m / n << endl;
cout << k << " " << 1. * k / n << endl;
}
在二维坐标系中,做N条垂直线(与x轴垂直),起点为(i, 0),终点为(i, Yi)。i为自然数, 0<= i <= N。试从N条垂直线中取出2条并且与X轴形成一个凹型水槽,向其中注水,问如何选择垂线能使注入的水最多(即两条垂线的x坐标之差的绝对值乘上两条垂线段中y坐标较小的那个,得到的结果要最大)。先输入一个数N,代表垂线段的个数,在输入N个Yi(i = 0,1,2.....N-1)。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pi 3.1415927
#define double long double
#define x first
#define y second
const int N = 2e5 + 10;
double eps= 1e-8;
ll f[N + 5];
int p[N];
/*
每次找到离u较近的点进行更新
*/
int find(int x){
if(x != p[x]) p[x] = find(p[x]);
return p[x];
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int n;
cin >> n;
vector<int> a(n + 1);
for(int i = 1; i <= n; i ++) cin >> a[i];
int res = 0;
for(int i = 1; i <= n; i ++){
int mn = a[i];
for(int j = i + 1; j <= n; j ++){
int d = j - i;
res = max(res,d * min(a[i] , a[j]));
}
}
cout << res << endl;
}
第三题类似于模拟有时间再说
找朋友。假设A是B的朋友,那么B也是A的朋友,C与B为朋友,则C与A也为朋友,另外,自己与自己也是朋友。输入一个数N,代表人数,紧接着输入一个N*N的矩阵,1代表两个人是朋友,0代表两个人不是朋友。求有几个朋友圈。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pi 3.1415927
#define double long double
#define x first
#define y second
const int N = 2e5 + 10;
double eps= 1e-8;
ll f[N + 5];
int p[N];
/*
每次找到离u较近的点进行更新
*/
int find(int x){
if(x != p[x]) p[x] = find(p[x]);
return p[x];
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int n;
cin >> n;
for(int i = 1; i <= n; i ++) p[i] = i;
int ans = n;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n; j ++){
int a = i,b = j;
int x;
cin >> x;
if(x == 0) continue;
a = find(a),b = find(b);
if(a != b) p[a] = b,ans --;
}
}
cout << ans << endl;
}