【Day4】一名菜鸟ACMer的暑假训练
作者:互联网
【Day4】一名菜鸟ACMer的暑假训练
CF构造题1200-1400
D. Districts Connection
https://codeforces.com/problemset/problem/1433/D
1200
pair<帮派,编号>排序
第一个帮派的第一个成员连向不同帮派的所有成员,
第一个帮派的其他成员连向任意一个不同帮派的成员
#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
typedef pair<int, int> pii;
pii a[N];
void solve () {
int n;
cin >> n;
for (int i = 1; i <= n; i ++) {
int x;
cin >> x;
a[i] = {x, i};
}
sort (a + 1, a + n + 1);
if (a[n].first == a[1].first) {
cout << "NO\n";
return ;
}
int i;
set <pii> s;
for (i = 2; i <= n; i ++)
if (a[i].first != a[1].first)
break;
//cout << "i=" << i << endl;
for (int j = i; j <= n; j ++)
s.insert ({a[1].second, a[j].second});
for (int j = i - 1; j > 1; j --)
s.insert ({a[j].second, a[i].second});
//for (auto j : s) cout << j.first << ' ' << j.second << endl;
if (s.size () != n - 1) cout << "NO\n";
else {
cout << "YES\n";
for (auto j : s) cout << j.first << ' ' << j.second << endl;
}
}
int main () {
int t;
cin >> t;
while (t --) {
solve ();
}
}
//pair<帮派,编号>排序
//第一个帮派的第一个成员连向不同帮派的所有成员,
//第一个帮派的其他成员连向任意一个不同帮派的成员
B. Random Teams
1300
https://codeforces.com/problemset/problem/478/B
阶梯型增长(故局部最大值即全局最大值)
minn:均摊 + 多出来的再均摊
maxn:1 1 1 ... n-m+1
#include <bits/stdc++.h>
#define int long long
using namespace std;
int count (int x) {
return (x - 1) * x / 2;
}
signed main () {
int n, m;
cin >> n >> m;
int x = n - m + 1;
int maxn = count (x);
int dx = n/m, cnt = n%m;
//cout << dx << ' ' << cnt << endl;
int minn = (m - cnt) * count (dx) + cnt * count (dx + 1);
cout << minn << ' ' << maxn << endl;
}
//抽屉原理的裸题
//阶梯型增长(故局部最大值即全局最大值)
//minn:均摊 + 多出来的再均摊
//maxn:1 1 1 ... n-m+1
标签:cout,int,菜鸟,Day4,ACMer,帮派,连向,pair,成员 来源: https://www.cnblogs.com/CTing/p/16450308.html