A - Codehorses T-shirts

思路:有相同抵消,没有相同的对答案+1

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = 1e5 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ; string a[], b[];
int n; map<string, int> mp;
int main(){
scanf("%d", &n);
for(int i = ; i <= n; i++) cin >> a[i], mp[a[i]]++;
int ans = ;
for(int i = ; i <= n; i++) {
cin >> b[i];
if(mp[b[i]]) {
mp[b[i]]--;
} else {
ans++;
}
}
printf("%d\n", ans);
return ;
} /*
*/

B - Light It Up

思路:求一下前缀,如果要加一个开关肯定是加在原来是关的前面一个或者后面一个,枚举一下就好啦。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ; int n, M, sum[N], fsum[N], a[N];
int main(){
scanf("%d%d", &n, &M);
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
a[++n] = M;
for(int i = ; i <= n; i++) {
sum[i] = sum[i - ];
if(i & ) sum[i] += a[i] - a[i - ];
fsum[i] = a[i] - sum[i];
} int ans = sum[n];
for(int i = ; i < n; i++) {
if(i & ) {
if(a[i] > a[i - ] + ) {
int ret = a[i] - a[i - ] - ;
ret += fsum[n] - fsum[i];
ret += sum[i - ];
ans = max(ans, ret);
} if(a[i] < a[i + ] - ) {
int ret = sum[i];
ret += fsum[n] - fsum[i + ];
ret += a[i + ] - a[i] - ;
ans = max(ans, ret);
}
}
} printf("%d\n", ans);
return ;
} /*
*/

C - Covered Points Count

思路:离散化差分标记搞一搞

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = 1e6 + + 2e5;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ; LL n, tot, in[N], out[N], ans[N];
LL hs[N], l[N], r[N]; int main(){
scanf("%lld", &n);
for(int i = ; i <= n; i++) {
scanf("%lld%lld", &l[i], &r[i]);
hs[++tot] = l[i];
hs[++tot] = r[i];
hs[++tot] = l[i] + ;
hs[++tot] = l[i] - ;
hs[++tot] = r[i] + ;
hs[++tot] = r[i] - ;
} sort(hs + , hs + + tot);
tot = unique(hs + , hs + + tot) - hs - ; for(int i = ; i <= n; i++) {
int pos1 = lower_bound(hs + , hs + + tot, l[i]) - hs;
int pos2 = lower_bound(hs + , hs + + tot, r[i]) - hs;
in[pos1]++;
out[pos2]++;
} LL cnt = ;
for(int i = ; i < tot; i++) {
cnt += in[i];
ans[cnt]++;
cnt -= out[i];
LL num = hs[i + ] - hs[i] - ;
ans[cnt] += num;
} cnt += in[tot];
ans[cnt]++; for(int i = ; i <= n; i++) printf("%lld ", ans[i]);
return ;
} /*
*/

D - Yet Another Problem On a Subsequence

题目大意:给你n个数字 (n <= 1000), 问你有多少个子序列是good  sequence

good sequence的定义是能变成若干个good arrays

good array 的定义是这个数组的第一个元素的值等于这个数组的length - 1。

思路: A了三题之后日常开始挂机。。。 还是太菜啦!!!!

比赛的时候感觉是个dp,但是不知到如何定义状态。。。

后来发现原来我看错了题,原来是把good sequence划分成若干个good arrays

我们定义dp[ i ],表示从第 i 个开始,并且 i 作为一个array第一个元素的的合法答案的方案数。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int, int> using namespace std; const int N = 1e3 + ;
const int M = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ; int a[N], dp[N], C[N][N], n; void init() {
for(int i = (C[][] = ); i < N; i++)
for(int j = (C[i][] = ); j < N; j++)
C[i][j] = (C[i - ][j] + C[i - ][j - ]) % mod;
} int main() {
init();
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
} dp[n + ] = ; for(int i = n; i >= ; i--) {
if(a[i] > ) {
for(int j = i + a[i] + ; j <= n + ; j++) {
dp[i] = (dp[i] + 1LL * dp[j] * C[j - i - ][a[i]]) % mod;
}
}
} int ans = ; for(int i = ; i <= n; i++) {
ans = (ans + dp[i]) % mod;
} printf("%d\n", ans);
return ;
}
/*
*/

Educational Codeforces Round 46 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses

    Bryce1010模板 http://codeforces.com/contest/1000/problem/E 题意: 给一个无向图,求图的最长直径. 思路:对无向图缩点以后,求图的最长直径 #in ...

  2. Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/C 题意:问你从[l,r]区间的被多少条线覆盖,列出所有答案. 思路:类似括号匹配的 ...

  3. Educational Codeforces Round 46 (Rated for Div. 2) B. Light It Up

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/B 思路:先用两个数组sumon[]和sumoff[]将亮着的灯和灭的灯累计一下. ...

  4. Educational Codeforces Round 46 (Rated for Div. 2) A. Codehorses T-shirts

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/A 题意: 问你将一种类型的衣服转换成另一种的最小次数. #include<b ...

  5. Educational Codeforces Round 46 (Rated for Div. 2) D. Yet Another Problem On a Subsequence

    这个题是dp, dp[i]代表以i开始的符合要求的字符串数 j是我们列举出的i之后一个字符串的开始地址,这里的C是组合数 dp[i] += C(j - i - 1, A[i]] )* dp[j]; # ...

  6. Educational Codeforces Round 46 (Rated for Div. 2) D

    dp[i]表示一定包含第I个点的好的子序列个数,那么最终答案就是求dp[0] + dp[1] + .... + dp[n-1] 最终的子序列被分成了很多块,因此很明显我们枚举第一块,第一块和剩下的再去 ...

  7. Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序

    Educational Codeforces Round 72 (Rated for Div. 2)-D. Coloring Edges-拓扑排序 [Problem Description] ​ 给你 ...

  8. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  9. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

随机推荐

  1. dmsg命令使用

    http://note.youdao.com/noteshare?id=6771284da9f10ac35652907898d63141

  2. python的StringIO模块

    StringIO经常被用来作字符串的缓存,因为StringIO的一些接口和文件操作是一致的,也就是说同样的代码,可以同时当成文件操作或者StringIO操作. 一.StringIO中的常用方法 1.r ...

  3. OpenCV---边缘保留滤波EPF

    OpenCV经典的两种实现EPF方法:高斯双边和均值迁移 一:双边模糊 差异越大,越会完整保留 def bi_demo(image): dst = cv.bilateralFilter(image,0 ...

  4. Linux centos7下设置Tomcat开机自启动

    1,centos7 使用 systemctl 替换了 service命令 参考:redhat文档: https://access.redhat.com/documentation/en-US/Red_ ...

  5. LightOJ 1032 - Fast Bit Calculations 数位DP

    http://www.lightoj.com/volume_showproblem.php?problem=1032 题意:问1~N二进制下连续两个1的个数 思路:数位DP,dp[i][j][k]代表 ...

  6. C11线程管理:条件变量

    1.简介 C11提供另外一种用于等待的同步机制,它可以阻塞一个或者多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程.条件变量要和互斥量配合起来使用. condition_var ...

  7. select表单元素详解及下拉列表模拟实现

    原文地址:→看过来 写在前面 select 是HTML表单元素中很常用的一个,其中很重要的几个属性常被忽略,但这几个属性却能帮助我们完成很多的功能,当然,select下拉列表默认样式很不友好,所以更多 ...

  8. CSS属性的私有前缀

    在CSS属性能中,我们常常能看到-webkit-,-moz-之类的前缀,这种就叫做浏览器私有前缀,是浏览器对于新CSS属性的一个提前支持.-webkit-是webkit内核的,-moz-是Firefo ...

  9. Date、String、Calendar相互转化

    Date是在Jdk1.0出现的专门用来处理时间的类,但是由于Date在国际化方面存在限制,在Jdk1.1推出Calendar,现在Date的很多方法都已经过时,都迁移到Calendar上. 1.Dat ...

  10. vps建站教程 CentOS6如何安装配置FTP服务器

    通过之前的几篇文章,我们都知道了如何配置PHP环境,也知道如何保护我们的vps以及如何绑定多个域名建设多个网站.有时候我们为了让我们的朋友也能用我们的vps建站又不想给他们太多权限,有时候我们想要当个 ...