CF掉分日记 6.6 6.8
---恢复内容开始---
写的效果依旧不好 还没写完前四题比赛就结束了 而且这些普及组的题目 我大多还是缺少简单算法的灵性 总是把问题搞复杂化。
6.5 A 第一道题非常水 简单分析发现是一个快速幂的逆过程。logn时间内解决。
B 这是一个比平成的模拟要难上一点点的 模拟 因为有可能爆ll 所以写之前要把该考虑到的情况考虑好再写。
C 一眼不可做 也看不懂题目是什么意思,还是看不懂弃掉以后看见了再写https://codeforces.com/contest/1175/problem/C
D 感觉能写 一段序列分成k段 第一段乘1 第二段乘2... 求最大值 显然dp 然后 f[i][j] 表示前 i个数字分成j段的最大值 这个dp 是n^2k的相当难受 貌似斜率优化可以到nk 然后? 然后还是挂掉。
乱搞出来一个贪心 是 我从后往前拿第k 段 k-1段 每次我都选取最大的那个后缀和 nlogn 发现一直wa 没有考虑到一些因素并不是后缀和最大的是最优的因为当前数字造成的贡献不只只有前面的而且还是有后面的,所以说不太会写,考虑设p1 p2 ...pk 为每一段的断点 显然p1=1; pi<pi+1 取bi为 i~n的和 也就是后缀和 那么此时sum=1*(bp1-bp2)+2*(bp2-bp3)+..k*bk; 得到.bp1 + bp2 + bp3 + bp4 ... bpk;
发现我们只需取最大的这几个bp值即可 注意p1是强制取1的。
剩下的题目没看结束了。。。
6.8 A 是一道非常水的题目注意好关系就能AC
B 猛一看感觉是不可写的 但是实际上画个图发现每次放棋子只能放在上一个棋子的 右边 或者下边注意维护好轮换放即可。
C 是一道比较有意思的题目 看起来也不可做深入理解发现只会有两种情况 1 枚举每次放哪个数字了如果当前手牌中没有的话就一直取数字直至把这个数字取出来 然后模拟放回去。
或者是 在这个队伍之中就直接模拟排序好 如果可以成功那么一定优于第一种决策。这样就OK了!
D 好像是一个排列计数 看了一下不会写弃掉了现在再看 n<=2e5 看完题解 发现是一个很妙的树形dp
题目:https://codeforces.com/contest/1173/problem/D
哦 原来是这样的 对于一个无根树来说我们以任意的角度来看的话我们可以想象成每个点都可以是根,所以 可以以1为根 然后发现 1 任何位置都是可以放的。
考虑1的子树 由于子树必须是在一个圆弧之上 显然 。 所以子树们和父亲们放的位置决定了父亲的初始方案数 仔细思考1可以放n个位置我们让其按照一个方式放的话也把所有方案数遍历到了。
好题 于是就有转移了。下面放代码:
//#include<bits/stdc++.h>
#include<iomanip>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<deque>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<stack>
#include<algorithm>
#include<vector>
#include<cctype>
#include<utility>
#include<set>
#include<bitset>
#include<map>
#define INF 2147483646
#define ll long long
#define min(x,y) (x>y?y:x)
#define max(x,y) (x>y?x:y)
#define RI register ll
#define up(p,i,n) for(ll i=p;i<=n;++i)
#define db double
#define mod 998244353
using namespace std;
char buf[<<],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
}
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void put(ll x)
{
x<?x=-x,putchar('-'):;
int num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar('\n');return;
}
const int MAXN=;
int n,len;
ll fac[MAXN],sz[MAXN],f[MAXN];//f[i] 表示以i为根的子树内部的方案数
int vis[MAXN];
int lin[MAXN<<],nex[MAXN<<],ver[MAXN<<];
inline void add(int x,int y)
{
ver[++len]=y;
nex[len]=lin[x];
lin[x]=len;
}
inline void dfs(int x)
{
vis[x]=;sz[x]=;ll sum=;
for(int i=lin[x];i;i=nex[i])
{
int tn=ver[i];
if(vis[tn])continue;
dfs(tn);sum=sum*f[tn]%mod;
++sz[x];
}
//f[x]=fac[sz[x]];
if(x!=)f[x]=fac[sz[x]];
else f[x]=fac[sz[x]-];
f[x]=f[x]*sum%mod;
}
int main()
{
//freopen("1.in","r",stdin);
n=read();fac[]=;
for(int i=;i<n;++i)
{
int x,y;
x=read();y=read();
add(x,y);add(y,x);
}
for(int i=;i<=n;++i)fac[i]=fac[i-]*i%mod;
dfs();
put(f[]*n%mod);
return ;
}
剩下的题目就不说了。。不太会写也没有时间了。
CF掉分日记 6.6 6.8的更多相关文章
- cf掉分记——Avito Code Challenge 2018
再次作死的打了一次cf的修仙比赛感觉有点迷.. 还好掉的分不多(原本就太低没法掉了QAQ) 把会做的前三道水题记录在这.. A: Antipalindrome emmmm...直接暴力枚举 code: ...
- Codeforces940掉分记
掉分经过 难得这次时间比较好,下午17:35开始. 本来还很高兴,心想这回肯定不会犯困,没准排名能再上升一些呢,,可惜事与愿违-- 上来a题,光看懂题就花了一些时间. 然后开始写,结果第一遍CE,第二 ...
- Codeforces Round#402(Div.1)掉分记+题解
哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...
- CF480Div2掉分记
rating 1900+参加只有Div2的比赛也记rating了.还以为yyc报名没打会惨惨,原来不交题好像就不算参加.. 本来太晚了不想打,不过有Sinogi大佬带我还是打一打吧,apio之前练练手 ...
- cf上分的失落->高兴->更失落
cf昨日做出一个题居然div2打了1800多名直接上分了...我原以为垂直落地但是....我现在1399差一分就能蓝名了啊啊啊啊,以后不一定会有这个水平的啊,给个蓝名体验卡不行吗,多加一分会死啊... ...
- Codeforces Round 480 Div 2 光荣掉分记
痛 痛苦 痛苦啊. 越接近黄名想的越多了啊…… 都说了不要在意rating这破玩意了…… 没出E就算了,策略问题. 居然还FST了: FST个D就算了: FST个A算个**啊. 紧张的时候总会写出一些 ...
- Codeforces Round #670 (Div. 2) 深夜掉分(A - C题补题)
1406A. Subset Mex https://codeforces.com/contest/1406/problem/A Example input 4 6 0 2 1 5 0 1 3 0 1 ...
- 友链&&日记
上面友链,下面日记 友人链 最喜欢galgameの加藤聚聚 初三一本&&\(ACG\)姿势比我还丰厚的yx巨巨 更喜欢galgame的shadowice czx ZigZag胖胖 文文 ...
- 租酥雨的NOIP2018赛前日记
租酥雨的NOIP2018赛前日记 离\(\mbox{NOIP2018}\)只剩下不到一个月的时间辣! 想想自己再过一个月就要退役了,觉得有必要把这段时间的一些计划与安排记录下来. 就从国庆收假开始吧. ...
随机推荐
- python入门006
一:可变与不可变类型 可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的 不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的 2.验证 2.1 ...
- 某cms代码审计
前言 前几个礼拜上课老师带着挖cms的洞,挖出个cookie反序列化注入漏洞,和报错注入并且提交了cnvd.昨天去找源码的时候发现它更新了一个版本,更新日志上也没说修复,就想着看看漏洞还存不存在, ...
- Scala 面向对象(七):静态属性和静态方法
1 Scala中静态的概念-伴生对象 Scala语言是完全面向对象(万物皆对象)的语言,所以并没有静态的操作(即在Scala中没有静态的概念). 但是为了能够和Java语言交互(因为Java中有静态概 ...
- JS中this指向的更改
JS中this指向的更改 JavaScript 中 this 的指向问题 前面已经总结过,但在实际开中, 很多场景都需要改变 this 的指向. 现在我们讨论更改 this 指向的问题. call更改 ...
- 使用Java带你打造一款简单的英语学习系统
[一.项目背景] 随着移动互联网的发展,英语学习系统能结构化的组织海量资料.针对用户个性需求,有的放矢地呈现给用户,从而为英语学习者提供便利,提升他们的学习效率. [二.项目目标] 1. 实现美观的界 ...
- 如何写一个自己的HashMap
想必很多Java工程师出去面试的时候都会被问到HashMap的底层实现原理,很多人觉得没什么必要,反正我会用就行,就我的感觉而言,在初期确实没什么必要,但是站在公司角度想,如果面试者连底层实现都搞定了 ...
- Redis 分布式锁(一)
前言 本文力争以最简单的语言,以博主自己对分布式锁的理解,按照自己的语言来描述分布式锁的概念.作用.原理.实现.如有错误,还请各位大佬海涵,恳请指正.分布式锁分两篇来讲解,本篇讲解客户端,下一篇讲解r ...
- Java多线程原理+基础知识(超级超级详细)+(并发与并行)+(进程与线程)1
Java多线程 我们先来了解两个概念!!!! 1.什么是并发与并行 2.什么是进程与线程 1.什么是并发与并行 1.1并行:两个事情在同一时刻发生 1.2并发:两个事情在同一时间段内发生 并发与并行的 ...
- Go Pentester - TCP Scanner
Simple Port Scanner with Golang Use Go‘s net package: net.Dial(network, address string) package main ...
- Guava集合--新集合类型
Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...