Weekly 10 小结
模拟
T = int(input())
while T:
T -= 1
s = raw_input()
n = len(s)
res, pre = 0, 0
for i in xrange(1, n):
if (s[i] == s[pre]):
res += 1
else:
pre = i
print res
模拟
n, k = map(int, raw_input().split())
s = raw_input() res = []
ans = 0
for i in xrange(n):
if i >= k:
ans ^= int(res[i-k])
tmp = ans ^ int(s[i])
res.append(tmp)
ans ^= tmp
print ''.join(map(str, res))
题目大意:给出k种高度不同的积木,每种积木可以使用无数次,问使用这些积木拼成高度为N的塔的方法数对1e9 + 7的模是多少。
另F(x)为拼接成高度为x的方法数,则F(x) = sigma(F(i)) (1 <= i <= k && high[i] <= x)
可先处理出1~15的F函数的值,当N>15时,使用矩阵加速即可。
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long LL;
const int MOD = 1e9 + ;
#define rep(i, n) for (int i = (1); i <= (n); i++)
LL N, K, A[], f[];
struct Matrix {
LL a[][];
Matrix() {memset(a, , sizeof(a));} Matrix operator * (const Matrix &x) const {
Matrix c;
rep (i, ) rep (k, ) rep (j, ) c.a[i][j] = (c.a[i][j] + x.a[k][j] * a[i][k]) % MOD;
return c;
}
}; Matrix pow_mod(Matrix a, LL b) {
if (b < ) return a;
Matrix res;
rep (i, K) res.a[i][i] = ;
while (b > ) {
if (b & ) res = res * a;
a = a * a;
b >>= ;
}
return res;
} int main() {
ios::sync_with_stdio(false);
cin >> N >> K;
rep (i, K) cin >> A[i]; sort(A + , A + K + );
f[] = ;
rep (i, ) rep (j, K) if (i >= A[j]) f[i] = (f[i] + f[i - A[j]]) % MOD;
rep (i, ) cerr << f[i] << endl;
if (N <= ) {
cout << f[N] * % MOD << endl;
return ;
} Matrix a; rep (i, ) a.a[i][i-] = ;
a.a[][] = ; rep (i, K) a.a[][A[i]] = ;
Matrix res = pow_mod(a, N - );
LL ans = ;
rep (i, ) ans = (ans + res.a[][i] * f[ - i]) % MOD;
ans = (ans * ) % MOD;
cout << ans << endl;
return ;
}
题目大意:给出N个点,每个点有两个值V和P。要求从1开始走到N,在每个点选择有两种选择,要么将总得分加上V,要么还可以向前走P步。
目标是使得走到N时的总得分最大。题目保证至少存在一种解。
这题DP方程很明显,从后往前进行dp, dp[i] = min(dp[i], dp[j]), i < j <= i + P[i];
所以对于每个点,要快速的求出dp[i]~dp[i + P[i]] 的最小值。
直到做这个题我才知道原来BIT也可以用来求最值,原来0base和1base是这个含义。。(数组下标从0/1开始)
原来BIT数组下标可以从0开始,貌似被称为0base邪教,如:for (int x = i; x >= 0; x -= ~x & x + 1) {}
这里很巧妙的利用了~x = - x + 1,即~x = -(x + 1),还有运算符的优先级。摘自叉姐代码。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; #define rep(i, n) for (int i = (1); i <= (n); i++)
typedef long long LL;
const int MAX_N = ;
const LL INF = (LL)1e18;
int V[MAX_N], P[MAX_N];
LL tree[MAX_N];
int N; int main() {
scanf("%d", &N);
for (int i = ; i <= N; i++) scanf("%d %d", V+i, P+i); fill(tree+, tree+N+, -INF);
LL ans = tree[N] = V[N], sum = ;
for (int i = N-; i >= ; i--) {
ans = -INF;
for (int x = min(i+P[i], N); x > ; x -= x&-x)
ans = max(ans, tree[x]);
if (ans > -INF) {
for (int x = i; x <= N; x += x&-x)
tree[x] = max(tree[x], ans - V[i]);
} ans += sum;
sum += V[i];
}
printf("%lld\n", ans); return ;
}
Weekly 10 小结的更多相关文章
- CI Weekly #10 | 2017 DevOps 趋势预测
		
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
 - 学过 C++ 的你,不得不知的这 10 条细节!
		
每日一句英语学习,每天进步一点点: “Action may not always bring happiness; but there is no happiness without action.” ...
 - ASP.NET MVC 5 05 - 视图
		
PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...
 - SQList
		
SQLite顾名思议是以 SQL为基础的数据库软件,SQL是一套强大的数据库语言,主要概念是由「数据库」.「资料表」(table).「查询指令」(queries)等单元组成的「关联性数据库」(进一步的 ...
 - Python黑帽编程2.2  数值类型
		
Python黑帽编程2.2 数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型.长整型.布尔.双精度浮点.十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区 ...
 - 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
		
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
 - [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
		
[连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目 录 第一章 通讯框架介绍... 2 1.1 通讯的本质... 2 1 ...
 - 【模块化编程】理解requireJS-实现一个简单的模块加载器
		
在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ..... ...
 - 软件工程导论-目录-K-T+RJ大
		
目录 10 第1章 软件工程学概述/1 19 1.1 软件危机/1 19 1.1.1 软件危机的介绍/1 19 1.1.2 产生软件危机的原因/3 21 1.1.3 消除软件危机的途径/4 22 1. ...
 
随机推荐
- Android开发 处理拍照完成后的照片角度
			
private void initImageAngle(){ Bitmap imageBitmap = BitmapFactory.decodeFile(FilePathSession.getFace ...
 - Imageview 图片按比例缩放
			
只需要在 布局文件中 加入 android:adjustViewBounds="true"这行代码即可 它会让图片进行等比例的拉伸展示
 - 《OpenCV3编程入门》 札记
			
图像处理和计算机视觉的区别在于: 图像处理侧重于 "处理"图像 --- 如增强,还原,去噪,分割,等等:而计算机视觉重点在于使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟菜 ...
 - 动软DbHelperSQL
			
using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System ...
 - es6 + 笔记整理
			
1. ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数: const required = () => {throw new Error('Missing ...
 - 爬虫——python——百度地图经纬度查询——经纬度查看地点地名——利用百度API获取地名经纬度——爬取所有的中国地址
			
import requests address = '40.8587960,86.866991' url = 'http://api.map.baidu.com/geocoder?output=jso ...
 - Joomla - 模块系统(新建模块、模块类别、自定义模块)
			
Joomla - 模块系统,模块配合模板的布局设置.菜单分配.权限分配能创建出一个内容丰富且易于管理的高度自定义前端页面架构 一.新建模块 进入后台,点击顶栏菜单 扩展管理 -> 模块管理 ,进 ...
 - MySQL安全查询模式的问题
			
在学习mysql中的简单sql语句的执行.在用到update语句的时候,总提示如下错误: 15:08:00 update students t set t.tel="156626488 ...
 - 虚拟机vm安装黑群晖6.2
			
操作系统选择
 - Spring注解驱动(上)
			
记录常用的spring注解 1.@Configuration 和 @Bean spring中可以使用xml 的方式进行配置, 也可以使用 @ Configuration 来指定一个类为配置类, 并使用 ...