Codeforces Round #309 (Div. 1)
A. Kyoya and Colored Balls
大意: 给定$k$种颜色的球, 第$i$种颜色有$c_i$个, 一个合法的排列方案满足最后一个第$i$种球的下一个球为第$i+1$种球, 求合法方案数.
简单组合, 添加第$i$种时必须在最后放一个$i$, 剩余任意放, 可重组合算下贡献即可.
#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
using namespace std;
typedef long long ll;
const int P = 1e9+7, P2 = 998244353, INF = 0x3f3f3f3f;
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
const int N = 1e6+10;
int n, fac[N], ifac[N];
int C(int n, int m) {if (m>n) return 0;int t = (ll)fac[n]*ifac[m]%P*ifac[n-m]%P;return t;
}
int main() {fac[0]=ifac[0]=1;REP(i,1,N-1) fac[i]=(ll)fac[i-1]*i%P;ifac[N-1] = inv(fac[N-1]);PER(i,1,N-2) ifac[i]=(ll)ifac[i+1]*(i+1)%P;scanf("%d", &n);int ans = 1, sum = 0;REP(i,1,n) {int t;scanf("%d", &t);ans = (ll)ans*C(sum+t-1,t-1)%P;sum += t;}printf("%d\n", ans);
}
B. Kyoya and Permutation
大意: 定义了一种对排列的操作, 若一个排列操作后不变则为一个好排列, 求第$k$个好排列.
找下规律发现每个好排列的每个置换大小不超过2, 且大小为2的置换两个数要相邻.
所以可以得到$n$的好排列个数$F(n)$是满足递推$F(1)=1,F(2)=2,F(n)=F(n-1)+F(n-2)$.
#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;typedef long long ll;
int n;
ll f[100], k;int main() {f[0] = 1, f[1] = 1;REP(i,2,88) f[i]=f[i-1]+f[i-2];scanf("%d%lld", &n, &k);REP(i,1,n) {if (k<=f[n-i]) printf("%d ",i);else {k -= f[n-i];printf("%d %d ", i+1, i);++i;}}puts("");
}
C. Love Triangles
大意: 给定$n$节点$m$条边无向图, 每条边为0或1, 求补全为完全图, 且任意一个三元环的三条边恰好全1或恰好一个1的方案数.
显然确定两边后第三条边就已经固定了, 所以可以检验出每个连通块是否合法, 假设共cnt个连通块, 答案就是$2^{cnt-1}$.
#include <iostream>
#include <cstdio>
#include <queue>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
using namespace std;
typedef long long ll;
const int N = 1e6+10, P = 1e9+7;
int n, m, ans, vis[N];
struct _ {int to,w;};
vector<_> g[N];
void dfs(int x) {for (_ e:g[x]) {if (vis[e.to]==-1) {vis[e.to] = vis[x]^e.w;dfs(e.to);}else if (vis[e.to]!=(vis[x]^e.w)) ans = 0;}
}
int main() {scanf("%d%d", &n, &m);while (m--) {int u, v, w;scanf("%d%d%d", &u, &v, &w);g[u].pb({v,!w}),g[v].pb({u,!w});}memset(vis,-1,sizeof vis);ans = (P+1)/2;REP(i,1,n) if (vis[i]==-1) {vis[i] = 1, ans = (ll)ans*2%P, dfs(i);}printf("%d\n", ans);
}
D Nudist Beach
大意: 给定$n$节点$m$条边无向图, 标记了$k$个点. 要求从未标记的点中选出一个点集$S$, 每个点的价值是$\frac{A}{B}$, $A$为相邻的选中的点, $B$为相邻所有点, 整个点集的价值为所有点价值的最小值. 求$S$价值的最大值.
01分数规划问题, 转为二分答案即可.
#include <iostream>
#include <cstdio>
#include <queue>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;const double eps = 1e-8;
const int N = 1e5+10;
int n, m, k;
int deg[N], vis[N], cnt[N], used[N];
vector<int> g[N];
queue<int> q;
int chk(double x) {REP(i,1,n) cnt[i] = 0;REP(i,1,n) if (!vis[i]) { used[i] = 1;for (int j:g[i]) ++cnt[j];}REP(i,1,n) if (cnt[i]<x*deg[i]) q.push(i);while (q.size()) {int u = q.front(); q.pop();if (!used[u]) continue;used[u] = 0;for (int v:g[u]) if (--cnt[v]<x*deg[v]) q.push(v);}int tot = 0;REP(i,1,n) tot += used[i];return tot;
}int main() {scanf("%d%d%d", &n, &m, &k);REP(i,1,k) {int t;scanf("%d", &t);vis[t] = 1;}REP(i,1,m) {int u, v;scanf("%d%d", &u, &v);g[u].push_back(v),g[v].push_back(u);++deg[u],++deg[v];}double l = -eps, r = 1, ans;REP(i,1,200) {double mid = (l+r)/2;if (chk(mid)) ans=mid,l=mid+eps;else r=mid-eps;}chk(ans);int tot = 0;REP(i,1,n) tot += used[i];printf("%d\n", tot);REP(i,1,n) if (used[i]) printf("%d ", i);puts("");
}
E.
转载于:https://www.cnblogs.com/uid001/p/10952290.html
Codeforces Round #309 (Div. 1)相关推荐
- Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
A. Kyoya and Photobooks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- Codeforces Round #309 (Div. 1)D. Nudist Beach 二分+bfs
题目:http://codeforces.com/contest/553/problem/D 在一个无向图中,有若干坏点,选择一个不包含坏点的集合,使得集合中p值最小的点的p值最大.一个点的p值=集合 ...
- Codeforces Round #309 (Div. 2) C
题意: 就是给出总共同拥有k种颜色.每种颜色有ki种,排列必须满足第i+1种的最后一种颜色必须在第i种最后一种颜色的后面,其它颜色任意.总共同拥有多少种排列点的方法. 分析: 如果d[i]表示前i种的 ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...
- Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...
- Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...
最新文章
- sp MySQL 导入_mysql数据导入redis
- 诺基亚7原生android,【IT之家出品】诺基亚7快速上手体验:蔡司镜头回归,原生Android味...
- boost::qvm::deduce_quat相关的测试程序
- Objective-c 创建类的使用
- oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
- 信息学奥赛一本通(2028:【例4.14】百钱买百鸡)
- fcpx调整图层_【FCPX萌新系列】新手常遇到的4个基础调色问题
- nyoj-488-素数环
- 超级终端连接华为交换机_Win8系统如何使用超级终端连接华为交换机?
- 如何正确的寻找电影资源
- 成都11区+4县+5市高分辨率边界kml
- 蓝桥杯python组——明码
- 斯坦福大学自然语言处理第四课“语言模型(Language Modeling)”
- 沪牌学院-沪拍拍课堂4: 实拍前的演练
- Linq中Skip和Take用法(TakeWhile和SkipWhile用法)
- ICTCLAS代码学习笔记之CSpan类
- 王者荣耀: 史上最长对局, 无法打破的神话英雄, 10小时4千人头
- 前端开发工程师 - 02.JavaScript程序设计 - 第2章.进阶篇
- 【Web】1326- 深入浅出 Web Audio API
- 大数据背景下网络信息安全分析探讨