A - Splits

题意

将一个正整数拆分成若干个正整数的和,从大到小排下来,与第一个数字相同的数字的个数为这个拆分的权重。

问\(n\)的所有拆分的不同权重可能个数。

思路

全拆成1,然后每次将2个1换成1个2,即每次2的个数增加1。

共有1+n/2种。

Code

#include <bits/stdc++.h>
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
typedef long long LL;
int main() {
int n;
scanf("%d", &n);
printf("%d\n", n/2+1);
return 0;
}

B - Messages

题意

收到报文的时刻报文价值为A,之后每秒其价值减少B。在某个时刻读某个报文即能得到该报文此时的价值;此外,每秒能获得的固定收益为当前报文数*C.

问最大收益。

思路

理解题意即可:每个报文的价值,即每秒减少B,增加C。

因此只需比较B与C,如果B大,则所有报文都收到立即读;否则全都堆到最后读。

Code

#include <bits/stdc++.h>
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
typedef long long LL;
int main() {
int n,a,b,c,T;
scanf("%d%d%d%d%d",&n,&a,&b,&c,&T);
int x, sum=0;
F(i, 0, n) scanf("%d", &x), sum += x;
LL ans = n*a;
if (c>b) ans += 1LL*(c-b)*(n*T-sum);
printf("%d\n", ans);
return 0;
}

C - Alternating Sum

题意

计算\(\sum \limits_{i=0}^{n} s_{i} a^{n - i} b^{i}\),其中系数\(s\)只取\(\pm1\),且为周期函数,周期为\(T=\frac{n+1}{k}\).

思路

即计算\(\sum \limits_{i=0}^{k-1} s_{i} a^{n - i} b^{i}\cdot\frac{q^{\frac{n+1}{k}}-1}{q-1}\),注意特判\(q=1\).

Code

#include <bits/stdc++.h>
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
typedef long long LL;
const LL mod = 1e9+9;
LL poww(LL a, LL b) {
LL ret = 1;
while (b) {
if (b & 1) (ret *= a) %= mod;
(a *= a) %= mod;
b >>= 1;
}
return ret;
}
inline LL mul(LL a, LL b) { return a * b % mod; }
inline LL add(LL a, LL b) { return (a+b+mod) % mod; }
#define maxn 100010
char s[maxn];
int main() {
int n, a, b, k;
scanf("%d%d%d%d", &n, &a, &b, &k);
scanf("%s", s);
LL aa = poww(a, n), bb = 1, inva = poww(a, mod-2), ans = 0;
F(i, 0, k) {
int sign = s[i]=='+' ? 1 : -1;
ans = add(ans, sign*mul(aa, bb));
aa = mul(aa, inva);
bb = mul(bb, b);
}
LL q = mul(poww(b, k), poww(inva, k));
int cnt = (n+1) / k;
if (q == 1) ans = mul(ans, cnt);
else ans = mul(ans, mul(poww(q, cnt)-1, poww(q-1, mod-2)));
printf("%I64d\n", ans);
return 0;
}

D - Destruction of a Tree

题意

在树上删点,当且仅当该点的度数为偶数时才能删去,问能否删完图中所有点,并要求给出操作序列。

思路

从叶子开始从下往上考虑,显然叶子不能直接删,要删叶子必然要在删去其父亲节点之后进行。

而其父亲能不能直接删呢?如果其有奇数个孩子(未被删去的),则可以直接删去该节点(因其关联的边为连向其奇数个孩子+其父亲的共偶数条边),然后再向下删去之前未删去的部分;否则,其的删除工作必然要留到其父亲被删除之后才能进行。(注意,叶子节点也是符合这个特性的,因为叶子节点的孩子数0为偶数)

因此,dfs,从下往上考虑每个节点有多少个孩子未被删去;若为奇数个,则可删去该节点(并一路往下删孩子),并且忽略该节点对其父亲节点度数的贡献;否则,继续一路向上。

Code

#include <bits/stdc++.h>
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
#define maxn 200010
using namespace std;
typedef long long LL;
struct Edge {
int to, ne;
}edge[maxn<<1];
int ne[maxn], tot, rt;
bool flag[maxn];
vector<int> ans;
void add(int u, int v) {
edge[tot] = {v, ne[u]};
ne[u] = tot++;
}
void collect(int u, int fa) {
ans.push_back(u);
flag[u] = true;
for (int i = ne[u]; ~i; i = edge[i].ne) {
int v = edge[i].to;
if (v == fa || flag[v]) continue;
collect(v, u);
}
}
int dfs(int u, int fa) {
int tot = 0;
for (int i = ne[u]; ~i; i = edge[i].ne) {
int v = edge[i].to;
if (v == fa) continue;
tot += dfs(v, u);
}
if ((u==rt&&!(tot&1)) || (u!=rt&&tot&1)) collect(u, fa);
return !(tot&1);
}
int main() {
memset(ne, -1, sizeof ne);
int n, x;
scanf("%d", &n);
F2(i, 1, n) {
scanf("%d", &x);
if (!x) rt = i;
else add(i, x), add(x, i);
}
if (dfs(rt, -1)) {
puts("YES");
for (auto x : ans) printf("%d\n", x);
}
else puts("NO");
return 0;
}

Codeforces Round #475 Div. 2 A B C D的更多相关文章

  1. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1) 963B 964D B Destruction of a Tree

    题 OvO http://codeforces.com/contest/963/problem/B CF 963B 964D 解 对于题目要求,显然一开始的树,要求度数为偶数的节点个数为奇数个,通过奇 ...

  2. Codeforces Round #475 Div. 1

    B:当n是偶数时无解,因为此时树中有奇数条边,而我们每次都只能删除偶数条.当n是奇数时一定有解,因为此时不可能所有点度数都为奇数,只要找到一个度数为偶数的点,满足将它删掉后,各连通块大小都为奇数就可以 ...

  3. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String

    题意:有一个串s,n个串模式串t,问s的子串中长度最小的包含t k次的长度是多少 题解:把所有t建ac自动机,把s在ac自动机上匹配.保存每个模式串在s中出现的位置.这里由于t两两不同最多只有xsqr ...

  4. Codeforces Round #475 (Div. 2) C - Alternating Sum

    等比数列求和一定要分类讨论!!!!!!!!!!!! #include<bits/stdc++.h> #define LL long long #define fi first #defin ...

  5. Codeforces Round #475 (Div. 2) D. Destruction of a Tree

    题意:给你一棵树, 只能删度数为偶数的点, 问你能不能将整个图删完, 如果能输入删除的顺序. 思路:对于一棵树来说, 如果里面的点的个数是偶数个则肯定不可能, 偶数个点有奇数条边,而你每次删只能删偶数 ...

  6. Codeforces Round #475 (Div. 2)

    B. Messages 题意:有n个消息分别在ti的时候收到.设所有消息收到时初始值为A,每过一秒,其值减去B.当在某一秒选择读某个消息时,获值为当前消息的值:如果在某一秒结束的时候,手上有k则消息未 ...

  7. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)

    A. Splits time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  8. Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)

    A. Alternating Sum 就是个等比数列,特判公比为 $1$ 的情况即可. #include <bits/stdc++.h> using namespace std; ; ; ...

  9. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

随机推荐

  1. 在PXC中重新添加掉线节点

      Preface       When we add a new node into PXC structure,it will estimate the mothed(IST/SST) to tr ...

  2. 第三十四篇 Python面向对象之 反射(自省)

    什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...

  3. 孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2

    孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步 ...

  4. go 语言模拟百度登录

    1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...

  5. 机器学习sklearn的快速使用--周振洋

    ML神器:sklearn的快速使用 传统的机器学习任务从开始到建模的一般流程是:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测,分类.本文我们将依据传统 ...

  6. mysql 数据库 exists 和count

    由于最近在使用exists是出现了一个小问题,但是在调试的时候费了不少时间,因为自己只是牢固造成,所以在在此记录,已提醒自己. mysql中exists 用法: 通过和主查询管理 以达到过滤的效果,如 ...

  7. Alpha 冲刺5/10

    队名:我头发呢队 组长博客 杰(组长) 过去两天完成了哪些任务 继续翻阅Material Design2文档 翻阅网易云的web端网页 接下来的计划 音源爬取 还剩下哪些任务 app开发 燃尽图 有哪 ...

  8. 编译程序提示配置PKG_CONFIG_PATH

    http://blog.csdn.net/langeldep/article/details/6804331 在安装开源软件的过程中, 经常会碰到提示配置PKG_CONFIG_PATH路径, 或者直接 ...

  9. 算法(5)Jump Game

    题目:非负数的数组,每个数组元素代表这你能最大跨越多少步,初始在0的位置,问,能不能正好调到数组的最后一位! https://leetcode.com/problems/jump-game/#/des ...

  10. [NOI2017]游戏 2-sat

    ---题面--- 题解: 首先观察到,如果没有x的话,这就是一个2-sat问题. 建图方式:对于限制d1 c1 d2 c2,其中d1, d2分别代表比赛编号,c1, c2代表出场的赛车. 1,如果d1 ...