Codeforces Round #210 (Div. 1) (A, B, C)
来源:互联网 发布:阿里云备案导入 编辑:程序博客网 时间:2024/05/16 11:25
code:https://github.com/9974/Codeforces/tree/master/210div1
A
先倒着暴力处理询问, 然后正着check一下是不是符合要求。
B
求最大值最小,很典型的二分,一维dp判断是否合法 O(n*n*log(n))
dp[i]表示进行到第i位,且第i位不放的最小修改个数, 对于dp[i] 可以由dp[j]转移,j+1-----i-1都要修改,这时区间j----i的最小差距为 abs(a[i]-a[j])/(j+1到i-1的个数) 并向上取整,当然转移时必须让最小差距 <= 二分的mid
C
个人能力太弱,弄了一整天终于明白了
dp[i][j][0],dp[i][j][1],dp[i][j][2],分别表示进行到i美丽值为j 且s[i] 小于,等于,大于 t[i] (后面没取的就当与s[i]相同)
当i位取 t[i] <= s[i],美丽值均不变,则有
dp[i][j][0] = (dp[i-1][j][0] + dp[i-1][j][1] + dp[i-1][j][2])*(s[i] < t[i]的字母个数);
dp[i][j][1] = dp[i-1][j][0] + dp[i-1][j][1] + dp[i-1][j][2];
当i位取 t[i] > s[i], 美丽值改变
位置i可以由位置t转移过来,且区间t+1-----i-1 中 所有s[] == t[], j值增加了 (n-i+1)*(i-t) (自己想想清楚);
由于 (n-i+1)*(i-t) 是一个二次函数, 能符合要求的t不会很多,所以转移并不是O(n)的
dp[i][j][2] = (dp[t][j-(n-i+1)*(i-t) ][0]dp[t][j-(n-i+1)*(i-t) ][2])*(s[i] > t[i]的字母个数);
仔细思考可以发现大于小于两个状态可以合并,我写的代码也是合并后的情况。
- Codeforces Round #210 (Div. 1) (A, B, C)
- Codeforces Round #174 (Div. 1) (A, B, C)
- Codeforces Round #198 (Div. 1)(A,B,C,D)
- Codeforces Round #207 (Div. 1)(A,B,C)
- Codeforces Round #148 (Div. 1)(A,B,C)
- Codeforces Round #215 (Div. 1)(A,B,C)
- Codeforces Round #219 (Div. 1)(A,B,C)
- Codeforces Round #232 (Div. 1)(A,B,C,D)
- Codeforces Round #236 (Div. 1) A,B,C
- Codeforces Round #236 (Div. 1)(A, B, C, D)
- Codeforces Round #243 (Div. 1)-A,B,C-D
- Codeforces Round #253 (Div. 1) (A, B, C)
- Codeforces Round #FF (Div. 1)-A,B,C
- Codeforces Round #257 (Div. 1)-A,B,C
- Codeforces Round #259 (Div. 1) (A,B,C)
- Codeforces Round #263 (Div. 1)-A,B,C
- Codeforces Round #263 (Div. 1) A B C
- Codeforces Round #283 (Div. 1)解题报告A.B.C.
- python 字符串之strip
- [线性代数] 如何求协方差矩阵
- Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- C++.Homework. Operator overloading.01
- Mongodb学习文章辑录
- Codeforces Round #210 (Div. 1) (A, B, C)
- 面试必备的9大成功秘诀
- opencv_笔记_core_basic structures_1117
- C++继承:公有,私有,保护
- UVA - 11795 Mega Man's Mission
- JSP翻页功能代码
- 高仿QQ电脑管家8 界面
- command使用方法
- press TAB to show Post screen,DEL to enter SETUP