今天考了毕姥爷的一套题,差点保龄

题目

挺良心的一套题,至少我不用再搬一遍题面了

T1.B君的第一题

我为什么当时去写了一个树形\(dp\)还妄图\(A\)掉啊

这题保龄感觉舒爽

首先如果我们要求的是点联通块的期望个数的话,那就非常好求了,一个点周围的边就算全删掉,这个点也是一个联通块,又因为这是一个树,所以每删一条边就会新增加一个联通块

所以答案就是

\[\frac{\sum_{i=0}^{n-1}\binom{n-1}{i}\times (i+1)}{2^{n-1}}
\]

但是这道题求的是边联通块,删掉\(i\)条边之后可能并不会剩下\(i+1\)个联通块

于是考虑把那些多算的贡献减掉,发现一个点周围的所有边都被删除之后这个点就不会成为联通块了

于是对于每个点单独算一些贡献

\[\sum_{i=1}^n\frac{1}{2^{d_i}}
\]

\(d_i\)表示\(i\)的度,即和\(i\)相连的边数

代码

#include<cstdio>
typedef long long LL;
const LL MOD=1000000007;
LL inv[100005];
int x,y,d[100005];
LL pw[100005];
int n;
int main()
{
LL now=1,ans=1;
scanf("%d",&n);
for( int i=1;i<n;i++) scanf("%d%d",&x,&y),d[x]++,d[y]++;
inv[1]=1;
for (int i=2;i<=n+1;i++) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
for (int i=1;i<n;i++) {
now=((now*(n-i))%MOD*inv[i])%MOD;
ans=(ans+now*(i+1)%MOD)%MOD;
}
ans=ans*2ll;ans%=MOD;
pw[0]=1;
for(int i=1;i<=n;i++) pw[i]=pw[i-1]*2ll%MOD;
for(int i=1;i<=n;i++)
ans=(ans+MOD-pw[n-d[i]])%MOD;
printf("%lld\n",ans);
return 0;
}

T2.B君的第二题

还是不怎么会

但是当时并没有看出来这是一个查第\(k\)大的数据结构可以维护的东西,甚至想用树状数组加二分,想一想好像挺难写就弃疗了

正解是求出每一个元素是第几轮出去的,之后上一个基排

并没有看懂\(f[i]=f[i-i/k-1]+1\)这样的操作,先放上毕姥爷代码

#include <bits/stdc++.h>
using namespace std;
int t, n, k, p, mod = 1000000007;
int f[1000020];
int c[1000020];
int a[1000020];
bool isPrime(int x) {
if (x < 2) {
return false;
}
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int main() {
freopen("harbin.in", "r", stdin);
freopen("harbin.out", "w", stdout);
scanf("%d", &t);
for (int tt = 0; tt < t; tt++) {
scanf("%d%d", &n, &k);
p = n;
while (!isPrime(p)) {
p++;
}
for (int i = 0; i < n; i++) {
c[i] = 0;
}
for (int i = 0; i < n; i++) {
if (i % k == 0) {
f[i] = 0;
} else {
f[i] = f[i - i / k - 1] + 1;
}
c[f[i] + 1]++;
}
for (int i = 1; i <= n; i++) {
c[i] += c[i - 1];
}
for (int i = 0; i < n; i++) {
a[c[f[i]]++] = i;
}
int z = 0;
for (int i = n - 1; i >= 0; i--) {
z = ((long long)z * p + a[i]) % mod;
}
printf("%d\n", z);
}
return 0;
}

T2.B君的第三题

可能是最简单的题了,也是我唯一能\(A\)的题了

看到都互质这个要求,我们就想到分解质因数之后没有相同的质因数

发现\(a_i<=30\),于是我们只需要考虑\(2\)到\(53\)这些质数,因为把\(30\)变成\(60\)多的数显然不如直接改成\(1\)更划算

发现这也就是\(16\)个质数,于是我们可以考虑状压

\(dp[i][s]\)表示前\(i\)个数选择的质因数状态为\(s\)的最小花费,每次我们枚举这个数改成什么,预处理出这个数分解之后的状态和\(s\)不能有交集就可以转移

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 105
#define inf 15000
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int p[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
short dp[2][1024*128+1];
int a[maxn],val[maxn];
int n,o,M;
int main()
{
n=read();
for(re int i=1;i<=n;i++) a[i]=read();
std::sort(a+1,a+n+1);
o=0;
for(re int i=1;i<=16;i++) if(a[n]+n<=p[i]) {M=i;break;}
if(!M) M=16;
for(re int i=1;i<(1<<M);i++) dp[o][i]=inf;
for(re int i=1;i<=p[M];i++)
{
int now=0,t=i;
for(re int k=1;k<=M;k++)
{
while(t%p[k]==0) t/=p[k],now|=(1<<(k-1));
if(t==1) break;
}
val[i]=now;
}
for(re int i=1;i<=n;i++,o^=1)
{
for(re int k=0;k<(1<<M);k++) dp[o^1][k]=inf;
for(re int j=1;j<=p[M];j++)
{
int now=((1<<M)-1)^val[j],t=(a[i]>j?a[i]-j:j-a[i]);
for(re int k=now;k;k=(k-1)&now)
dp[o^1][k|val[j]]=min(dp[o^1][k|val[j]],dp[o][k]+t);
dp[o^1][val[j]]=min(dp[o^1][val[j]],dp[o][0]+t);
}
}
int ans=inf;
for(re int k=0;k<(1<<M);k++)
ans=min(dp[o][k],ans);
printf("%d\n",ans);
return 0;
}

郑州Day6的更多相关文章

  1. Python之路,Day6 - Python基础6

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  2. day6

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  3. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  4. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  5. 团队项目——站立会议DAY6

    团队项目--站立会议 DAY6        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/13),站立会议已进行了一周时间,大家将这一周所遇到的问题和 ...

  6. pytho day6 <正则表达式、常用模块、反射>

    本节介绍: 一:正则表达式: 正则表达并不是python 独有的.在各个语言里都有该语法的介绍.正则表达是处理字符串的强大的处理工具.拥有自己的独特的 处理方法.和处理引擎.虽然性能没有python ...

  7. python笔记 - day6

    python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...

  8. 30天,APP创业从0到1【7.11郑州站】

    活动概况 时间:2015年07月11日13:30-16:30 地点:慧谷咖啡(郑州杨金路9号河南外包产业园天元W栋) 主办:APICloud.环信.河南中医药大学医药信息化实验室 网址:www.api ...

  9. python_way day6 反射,正则 模块(进度条,hash)

    python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...

随机推荐

  1. while循环案例

    class While05{ public static void main(String[ ]args){ //练习1:使用while循环完成输出1------10中的每个数 /*int i =1; ...

  2. LeetCode 112.路径总和(C++)

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22 ...

  3. Eclipse的企业开发时常用快捷键使用、优化配置(博主推荐)

    不多说,直接上干货! 一.简介 eclipse可谓是Java开发界的神器,基本占据了大部分的Java开发市场,而且其官方还对其他语言提供支持,如C++,Ruby,JavaScript等等.为什么使用它 ...

  4. Android ContentProvider的介绍(很详细)

    博客分类: android进阶   一.ContentProvider的概念 ContentProvider:为存储和获取数据提供统一的接口.可以在不同的应用程序之间共享数据.Android已经为常见 ...

  5. Android中的ListView点击时的背景颜色设置

    想设置listview中每行在点击.选中等不同状态下有不同的背景颜色,或者背景图片. 这可以用Android的Selector来实现.它可以定义组件在不同状态下的显示方式. 新建一个xml文件list ...

  6. 将 flask 中的 session 存储到 SQLite 数据库中

    将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...

  7. [转]jQuery Validate使用说明

    本文转自:http://www.cnblogs.com/gimin/p/4757064.html jQuery Validate 导入 js 库 <script src="./jque ...

  8. 微信token验证源码分享(c#版)

    在开发时遇到一个问题: 上线后提交申请微信提示"您的服务器没有正确响应token验证...",我查看日志发现根本就没有接收到来自微信的参数. 后来我又记录了微信请求方式和请求的字符 ...

  9. 05.if结构

    分支结构:if  if-else 选择结构:if else-if switch-case 循环结构:while do-while for foreach if语句 语法: if(判断条件) { //要 ...

  10. navicat 12 破解

    一.安装 官方下载下载 http://www.navicat.com.cn/download/navicat-premium 二.安装完后下载破解文件 https://pan.baidu.com/s/ ...