这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了。

这几天的题换做llj、sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他们的差距真的是非常非常大,dcoier跟其他学校的大佬的差距更是如此。我不知道我之前没有自知之明的时候对自己的定义是怎么样的,但是现在我发现我大概真的是一个堪堪noip一等奖水平的选手。

已经不知道该怎么办了,我甚至很想自暴自弃地大喊,我已经凉了!!dcoi没有救的!!每一届每一届地下去都会凉透的!!

B 君的第一题 (changchun)

这是一道讲过的数学题,然而我实在太菜并不记得怎么做。

然后写了个树dp,似乎递归爆栈了只有90。f[x][0]表示x的子树中与x不相连的联通块个数的期望,f[x][1]表示与x相连的联通块个数的期望,也就是有点和x相连的概率,就可以转移了。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,p=;
typedef long long LL;
typedef double db;
using namespace std;
int n;
LL pr[N],inv=; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[N<<],to[N<<];
void add(int u,int v) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
} LL f[N][],son[N];
void dfs(int x,int fa) {
son[x]=;
for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
int y=to[i];
son[x]++;
dfs(y,x);
f[x][]=(f[x][]+(f[y][]+f[y][]*inv%p)%p)%p;
}
f[x][]=(pr[n]-pr[n-son[x]]+p)%p;
} #define ANS
int main() {
#ifdef ANS
freopen("changchun.in","r",stdin);
freopen("changchun.out","w",stdout);
#endif
read(n);
pr[]=;
For(i,,n) pr[i]=pr[i-]*%p;
For(i,,n) {
int x,y;
read(x); read(y);
add(x,y);
}
dfs(,);
printf("%lld\n",(f[][]+f[][])%p);
Formylove;
}

树dp

正解:

考虑点的联通块怎么算,树中砍掉k条边就形成k+1个联通块,每条边被砍的概率是1/2,那么砍掉边的期望就是(n-1)/2,形成联通块的期望就是(n-1)/2+1

然后边的联通块就减去单独一个点形成的联通块的个数的期望即可。

单独点的联通块个数的期望等于每个点形成的单独联通块的个数期望之和,即每个点成为单独联通块的概率之和。llj切这题似乎只需要3min。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,p=;
typedef long long LL;
typedef double db;
using namespace std;
int n,in[N];
LL pr[N],ans; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL mo(LL x) { return x<?x+p:(x>=p?x-p:x); } #define ANS
int main() {
#ifdef ANS
freopen("changchun.in","r",stdin);
freopen("changchun.out","w",stdout);
#endif
read(n);
pr[]=;
For(i,,n) pr[i]=mo(pr[i-]*);
For(i,,n) {
int x,y;
read(x); read(y);
in[x]++; in[y]++;
}
ans=((LL)n+)*pr[n-]%p;
For(i,,n)
ans=mo(ans-pr[n-in[i]]);
printf("%lld\n",ans);
Formylove;
}

B 君的第二题 (harbin)

除了菜菜菜菜菜菜我不知道还能说些什么。

弱智都知道的70pt做法就是随便拿个啥子数据结构模拟,我不想打平衡树又忘了树状数组求第k大怎么打,在那里打印了一个树状数组现场研究,还写挂了一次。

正解是,考虑每个人是第几轮被踢出去的,O(n)地dp这个东西,然后基数排序即可。。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,mod=1e9+;
typedef long long LL;
typedef double db;
using namespace std;
int T,n,k,pr[N],f[N],c[N],sa[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int p[N],bo[N];
void get_prime() {
For(i,,) {
if(!bo[i]) p[++p[]]=i;
for(int j=;j<=p[]&&p[j]*i<=;j++) {
bo[i*p[j]]=;
if(i%p[j]==) break;
}
}
} void pre() {
int l=,r=p[],rs=;
while(l<=r) {
int mid=((l+r)>>);
if(p[mid]>=n) rs=mid,r=mid-;
else l=mid+;
}
int P=p[rs];
pr[]=;
For(i,,n) pr[i]=(LL)pr[i-]*P%mod;
} LL mo(LL x) { return x>=mod?x-mod:x; } #define ANS
int main() {
#ifdef ANS
freopen("harbin.in","r",stdin);
freopen("harbin.out","w",stdout);
#endif
pr[]=;
For(i,,) pr[i]=pr[i-]*;
get_prime();
read(T);
while(T--) {
read(n); read(k);
pre();
For(i,,n-) {
if(i%k==) f[i]=;
else f[i]=f[i-(i/k+)]+;
c[f[i]]++;
}
For(i,,n-) c[i]+=c[i-];
Rep(i,n-,) sa[--c[f[i]]]=i;
LL ans=;
For(i,,n-)
ans=mo(ans+(LL)sa[i]*pr[i]%mod);
printf("%lld\n",ans);
if(T) memset(c,,sizeof(c));
}
Formylove;
}

B 君的第三题 (shenyang)

一个很弱智的状压dp,然而我当时竟然觉得一个质数跟自己互质,然后说这是什么沙比题随便搜一下就差不多了吧写了个迭代加深。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,up=;
typedef long long LL;
typedef double db;
using namespace std;
int p[]={,,,,,,,,,,,,,,,};
int n,a[N],ans,f[N][up+]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int get(int x) {
int rs=;
For(i,,) if(x%p[i]==)
rs|=(<<i);
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("shenyang.in","r",stdin);
freopen("shenyang.out","w",stdout);
#endif
read(n);
For(i,,n) read(a[i]);
memset(f,/,sizeof(f));
f[][]=;
ans=n*;
For(i,,n) {
For(x,,) {
int now=get(x),S=(now^up);
for(int s=S;;s=((s-)&S)) {
f[i][s|now]=min(f[i][s|now],f[i-][s]+abs(x-a[i]));
if(!s) break;
}
}
if(i==n) For(s,,up) ans=min(ans,f[i][s]);
}
printf("%d\n",ans);
Formylove;
}

最新文章

  1. 转 Windows+VS2013爆详细Caffe编译安装教程
  2. 无法解析指定的连接标识符 oracle错误12154
  3. Eclipse中设置在创建新类时自动生成注释
  4. 批量下载QQ空间日志
  5. 在Ubuntu Linux下怎样安装QQ
  6. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)
  7. jdk内存
  8. USACO maze1 BFS
  9. 比ORA-24777: 我不使用不可移植数据库链接更郁闷的事情达成一致
  10. set RowCount 与 top n
  11. 经常使用git命令集
  12. ATM取款~~
  13. JS对象或属性的不变性
  14. 《Java技术》第三次作业--面向对象——继承、抽象类、接口
  15. Linux云计算工程师
  16. Centos 6.5 freeswitch 编译mod_shout
  17. VC.【转】窗口置于前台并激活的方法
  18. WCF(五) 深入理解绑定
  19. Conductor
  20. servlet的url-pattern规则

热门文章

  1. Black And White(DFS+剪枝)
  2. RMQ with Shifts(线段树)
  3. 九度OJ 1190:大整数排序 (大数运算、排序)
  4. AFN多文件进度下载
  5. [JavaScript]WebBrowser控件下IE版本的检测
  6. Netty Redis 亿级流量 高并发 实战 (长文 修正版)
  7. JavaScript 中 onload 事件绑定多个方法的优化建议
  8. CF1060 E-Sergey and Subway
  9. git入门篇-----本地操作
  10. Flex中容器的完全隐藏