Codeforces 909C - Python Indentation】的更多相关文章

909C - Python Indentation 思路:dp. http://www.cnblogs.com/Leohh/p/8135525.html 可以参考一下这个博客,我的dp是反过来的,这样就可以边转移边求前缀和,不需要用树状数组优化. 代码: #include<bits/stdc++.h> using namespace std; #define pb push_back #define ll long long #define mem(a,b) memset(a,b,sizeof…
题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Python,只有两种语句: (1)'s'语句:Simple statements. 相当于一般语句. (2)'f'语句:For statements. 相当于for循环,并且规定它的循环体不能为空. 然后给你一段没有缩进的Python程序,共n行(n <= 5000). 问你添加缩进后,有多少种合法且不同的…
http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的statement就可以随便放,但其实并不是这样,statement的位置会取消比它缩进更多或相等的for的可append性.所以设计dp顺序的时候要用dp[i][j]表示第i行剩余可选for循环数量为j的选法数.那么递推公式也不难(才怪),看看代码就好了. 有几个可以优化的,一个是滚动数组,另一个是线性求前…
题目链接:Python Indentation 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现.现在有一种简化版的Python,只有两种语句: (1)'s'语句:Simple statements. 相当于一般语句.(2)'f'语句:For statements. 相当于for循环,并且规定它的循环体不能为空. 然后给你一段没有缩进的Python程序,共n行(n <= 5000).问你添加缩进后,有多少种合法且不同的Python程序. 题解:题目解析 DP过去,如果第i个…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有(x+1,y),(x+1,y-1),(x+1,y-2)..(x+1,0)这些位置可以写下一行的代码了. 写个记忆化搜索就好. (这里的y就是tab的个数-1) [代码] #include <bits/stdc++.h> #define ll long long using namespace st…
In Python, code blocks don't have explicit begin/end or curly braces to mark beginning and end of the block. Instead, code blocks are defined by indentation. We will consider an extremely simplified subset of Python with only two types of statements.…
http://codeforces.com/problemset/problem/909/C dp[i][j]表示第i行缩进j的方案数. 当第i-1行为f时,无论当前行是f或s都必须缩进,即dp[i][j+1]=dp[i-1][j]; 当第i-1行为s时,无论当前行时f或s,缩进j的方案数为第i-1行缩进j~n的方案数. 最后注意%1e+7 #include<iostream> #include<cstdio> #include<cstring> #include<…
题意略. 思路: 开始的时候,定义dp[i]:当前行在第i行,i~n有多少种排列方式,如果i为f,那么dp[i] = dp[i + 1],因为第i + 1条语句只能放在f后且向右缩进一位: 如果i为s,那么dp[i]还与第i行的缩进有关.因此我们增加缩进这个状态. 定义dp[i][j]:当前行在第i行,缩进为j,i~n有多少种排列方式. 当i为s的时候,dp[i][j] = sum(dp[i + 1][k]) 1 <= k <= j: 当j为f的时候,dp[i][j] = dp[i + 1][…
Codeforces Round #455 (Div. 2) A. Generate Login 题目描述:给出两个字符串,分别取字符串的某个前缀,使得两个前缀连起来的字符串的字典序在所有方案中最小,输出该字符串. solution 为保证字典序最小,第二个字符串只会选第一个字符,然后先选上第一个字符串的第一个字符(因为不能为空),接着从第二个字符开始,如果该字符小于第二个字符串的第一个字符,那么选上,否则停止,输出答案. 时间复杂度:\(O(n)\) B. Segments 题目描述:给定一个…
题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于剩下的数.然后想到两种取法,一种是排好序选前半段.令一种取法是两个两个分组,每组取大的那个.//然后就可以(很困难地)想到一种巧妙的取法,先用一个结构体保存a,b,idx,按照a从大到小排序,先取第一个,再对剩下的每两个一组取其中b更大的.这样保证了被选出//的b一定大于剩下的b,也就满足了条件.然…