第二周 9.7---9.13

---------9.7

cf 575 h

http://codeforces.com/problemset/problem/575/H

题意不懂怎么描述诶,大意就是

先有一颗满二叉树,然后从根到叶子的路上有n条边染成红色,n条边染成蓝色,问满足这样条件的树有多少个节点

想到一点点,就是每次扩展下一层的时候,用本来应该满足满二叉树的节点数减去不合法的节点数---

可是不懂算这里------

本来按照一颗正常的二叉树

每扩展一层,节点数乘以2

但是因为有n的限制

就不会增加那么多个的节点

在前n层,是没有限制的,红色蓝色任意选

但是到第n+1层,因为肯定有两条路是已经填完红色,蓝色的

所以 它增加的节点数 为 (   C(n+1,n) - C(n,n) ) *2

然后假设现在走到深度为 K + 1

它比上一层增加的节点数 为 (C(K+1,n) - C(K,n))*2

再一层层的算

----------------话说不懂组合数取模,先抄了个lucas,T了

后来----抄了一个预处理的---------还是不懂这样算组合数---------------

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 typedef long long ll;
 8 const int MAXN = 2000010;
 9 const ll mod = 1e9 + 7;
10
11 int N;
12 ll fac[MAXN + 10],afac[MAXN + 10];
13
14 ll Q_pow(ll x,ll y){
15     ll res = 1;
16     x %= mod;
17     while(y){
18         if(y & 1) res = res * x % mod;
19         x = x * x % mod;
20         y >>= 1;
21     }
22     return res;
23 }
24
25 void Pre(){
26     fac[0] = 1;
27     for(int i = 1; i <= MAXN; ++i) fac[i] = fac[i - 1] * (ll)i % mod;
28     afac[MAXN] = Q_pow(fac[MAXN],mod - 2);
29     for(int i = MAXN; i >= 1; --i) afac[i - 1] = afac[i] * i % mod;
30 }
31
32 ll C(ll n,ll m){
33     if(m > n) return 0;
34     return fac[n] * afac[n - m] % mod * afac[m] % mod;
35 }
36
37 int main(){
38     Pre();
39     scanf("%d",&N);
40     ll ans = Q_pow(2,N+1)-1;
41     ll cur = Q_pow(2,N);
42     ll tmp = cur;
43     for(int i = N+1;i <= 2*N;i++){
44         ll shao = 2LL*((C(i-1,N) - C(i-2,N) + mod) % mod) %mod;
45     //    printf("shao = %I64d\n",shao);
46         tmp = (tmp-shao + mod)%mod;
47          cur = cur + tmp;
48          ans = (ans + cur) %mod;
49          tmp = 2LL*tmp%mod;
50     }
51     printf("%I64d\n",ans);
52     return 0;
53 }

新的一周----加油--------------------------

cf 2B

http://codeforces.com/problemset/problem/2/B

这题目的编号 >_<

不会做------------

先想的是 dp[i][j]表示走到第i行,第j列的0最少有多少个

可是转移不出来

后来,题解是这样做的

因为答案所在的路径要不然是含有2的个数最少的,要不然是含有5的个数最少的

画几个例子就懂了---

然后就按照2的个数少dp一次,按照5的个数少dp一次

不过要注意给出的矩阵中本身含有0的情况

如果矩阵中含有0,就要用1和 dp2 ,dp5的答案去比较,1更小的话,直接构造出一条走0的路线

还是不懂路径打印----在cf上翻了一份------

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 const int INF = (1<<30)-1;
 8 const int maxn = 1005;
 9 int f[maxn][maxn][2],g[maxn][maxn][2];
10 int n,x,pos;
11
12 void print(int x,int y){
13     if(x == 1 && y == 1) return;
14     if(g[x][y][pos]) print(x-1,y),printf("D");
15     else print(x,y-1),printf("R");
16 }
17
18 int main(){
19     scanf("%d",&n);
20     memset(f,0,sizeof(f));
21     memset(g,0,sizeof(g));
22
23     for(int i = 2;i <= n;i++)
24     f[i][0][0] = f[i][0][1] = f[0][i][1] = f[0][i][0] = INF;
25
26     for(int i = 1;i <= n;i++){
27         for(int j = 1;j <= n;j++){
28             int k;
29             scanf("%d",&k);
30             if(k == 0) x = i;
31             while(k){
32                 if(k%2 != 0) break;
33                 k = k/2;
34                 f[i][j][0]++;
35             }
36             while(k){
37                 if(k%5 != 0) break;
38                 k = k/5;
39                 f[i][j][1]++;
40             }
41             for(int k = 0;k < 2;k++){
42                 if(f[i-1][j][k] < f[i][j-1][k]) {
43                     f[i][j][k] += f[i-1][j][k];
44                     g[i][j][k] = 1;//D
45                 }
46                 else{
47                     f[i][j][k] += f[i][j-1][k];
48                     g[i][j][k] = 0;
49                 }
50             }
51         }
52     }
53
54 //    for(int i = 1;i <= n;i++){
55 //        for(int j = 1;j <= n;j++){
56 //            for(int k = 1;k < 2;k++)
57 //            printf("f[%d][%d][%d] = %d  g[%d][%d][%d] = %d\n",i,j,k,f[i][j][k],i,j,k,g[i][j][k]);
58 //        }
59 //    }
60
61     if(f[n][n][0] < f[n][n][1]) pos = 0;
62     else pos = 1;
63
64     int ans = min(f[n][n][0],f[n][n][1]);
65     if(x && (ans > 1)){
66         puts("1");
67         for(int i = 2;i <= x;i++) printf("D");
68         for(int i = 2;i <= n;i++) printf("R");
69         for(int i = x+1;i <= n;i++) printf("D");
70     }
71     else{
72         printf("%d\n",ans);
73         print(n,n);
74     }
75
76     return 0;
77 }

时间: 2024-10-12 08:54:29

第二周 9.7---9.13的相关文章

Linux第二周学习笔记(13)

2.19 特殊权限set_gid 特殊权限set_gid:这个权限可以作用在二进制可执行文件上,还可以作用在目录上.特殊权限set_gid权限位是作用在组权限位上,目录被设置set_gid权限后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组 ----------------------------------------------------------------------------------------------- [[email protected] ~]# chm

python第二周。2019.4.13

1, 我绘制大蟒蛇就是..保存也对着呢,你要是打开文件的话,先闪个黑屏,再闪个白屏..自动退出,然后啥都没了. 我觉得是我代码编错了...再来一遍! 这次到可以,但是这个大蟒蛇好像没有回头... 刚才错了一个括号... 2, turtle 是个图形库,就是叫做海龟库. 3, python语言的计算生态包括标准库和第三方库两种,其中python库就属于标准库. 标准库:随解释器直接安装到操作系统中的功能模块. 第三方库:需要经过安装才能使用的功能模块 另外,库library,包package,模块

第二周:PSP&amp;进度条

PSP: 一.词频统计改进 1.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(hrs) 学习 <构建之法>.Java 8:46 12:18 28 152 3  分析 读需求.分析需求 13:12 14:52 30 130 1.5  编码 具体编码 14:54 20:17 82 241 4  调试 修改代码.代码复审 20:32 21:54 18 64 1 总结 总结结果 23:06 23:39 0 33 0.5 2.饼图: 3.总结分析

HarvardX: PH525.4x Introduction to Bioconductor第二周笔记

PH525.4x第二周内容围绕GRange类的操作和使用Annotation进行数据关联两个主题展开,并展示了几个比较“炫”的功能.由于内容繁多,信息量大,故笔记之以便日后参考.该课程的演示数据为ChIP-seq的实验数据,背景为人类肝细胞(cell line:HepG2和GM12878)中被ESRRA (estrogen related receptor alpha)绑定的基因片段.在展示数据操作之前,首先检查bioconductor的版本号,不同版本的输出可能存在差异. library(Bi

hiho 第二周

Trie树,第一次写,简单的建树+搜索 它的思路hiho上讲得很清楚,good~ 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 char word[11]; 5 int n,m; 6 struct trie 7 { 8 int num; 9 trie *next[26]; 10 trie() 11 { 12 num = 0; 13 for(int i = 0; i < 26; i++) 14

OneZero第二周第三次站立会议(2016.3.30)

会议时间:2016年3月30日  13:00~13:20 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容或分配下一步任务. 会议内容: 1.前端,完成功能点为“将获取信息转化为中端所需格式”,“发送获取的信息给中端”.以下是代码部分 1 package com.onezero.account; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 im

魏昊卿——《Linux内核分析》第二周作业:了解操作系统是怎样工作的

魏昊卿——<Linux内核分析>第二周作业:了解操作系统是怎样工作的 一.实验部分 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 使用自己的Linux系统环境搭建过程参见mykernel,其中也可以找到一个简单的时间片轮转多道程序内核代码 mymain.c myinterr

20165232 第二周学习总结

20165232 第二周学习总结 1:带包的代码如何编译运行 代码编写完毕后,先Javac编译,再用mkdir以打包文件的文件名创建一个新文件夹,之后将编写的字节码文件用co命令拷贝到新的文件夹中,最后再运行. 2:一些知识点总结 第三章基础语法 3.1 类型.变量与运算符 类型 基本类型:整数(short.int.long).字节(byte).浮点数(float.double).字符(char).布尔(boolean) 常用格式控制符号 运算符 ==表示相等,=是指定运算,%运算结果是除法后的

20172322 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 了解了print与println的区别 了解了字符串的拼接可以用+来完成 了解了转义字符的使用 学会了使用赋值 学会使用部分算术运算符 学会了使用Scanner来实现交互性 教材学习中的问题和解决过程 问题1:在最初接触赋值时对foalt和double的赋值范围不了解 问题1解决方案:使用万能的度娘后看到一个高赞答案后有了了解 问题2:在提前预习时看到2.7图形后敲入的代码无法执行 问题2解决方案

软件测试第二周作业 wordcount

软件测试第二周作业 wordcount Github地址 https://github.com/mxz96102/word_count PSP2.1表格 PSP2.1 PSP 阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 25 30 · Estimate · 估计这个任务需要多少时间 150 252 Development 开发     · Analysis · 需求分析 (包括学习新技术) 20 20 · Design Spec · 生成设计文档 0 0 · Desig