t题目链接:Coder-Strike 2014 - Round 2

A题:简单水题,注意能加入反复的数字。因此仅仅要推断是否能把Min和Max加入好。就能够了

B题:开一个sum计算每一个聊天总和,和一个s计算每一个人在每一个聊天总和,最后每一个人就用总和减掉自己发送的就可以

C题:最优策略为先把非特殊的答完,然后从最大的開始答

D题:dp,状态为dp[i][j][k],i表示当前长度,j表示前面数字的总和,k表示是否能组成,然后进行记忆化搜索

代码:

A:

#include <stdio.h>
#include <string.h> int n, m, Min, Max, num[105]; bool judge() {
int f1 = 0, f2 = 0;
for (int i = 0; i < m; i++) {
if (num[i] < Min || num[i] > Max)
return false;
if (num[i] == Min) f1--;
if (num[i] == Max) f2--;
}
int yu = n - m;
if (!f1) yu--;
if (!f2) yu--;
if (yu < 0) return false;
return true;
} int main() {
scanf("%d%d%d%d", &n, &m, &Min, &Max);
for (int i = 0; i < m; i++)
scanf("%d", &num[i]);
if (judge()) printf("Correct\n");
else printf("Incorrect\n");
return 0;
}

B:

#include <stdio.h>
#include <string.h> const int N = 20005; int n, m, k, vis[N][15], sum[15], s[N][15], ans[N]; int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
scanf("%d", &vis[i][j]);
}
int x, y;
while (k--) {
scanf("%d%d", &x, &y);
x--; y--;
sum[y]++;
s[x][y]++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (vis[i][j])
ans[i] += (sum[j] - s[i][j]);
}
}
for (int i = 0; i < n - 1; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[n - 1]);
return 0;
}

C:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int N = 10000005;
int n, m;
long long sum, Max, vis[N];
struct Num {
long long num;
int vis;
} num[N]; bool cmp(Num a, Num b) {
return a.num > b.num;
} int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%lld", &num[i].num);
sum += num[i].num;
Max = max(Max, num[i].num);
}
int v;
for (int i = 0; i < m; i++) {
scanf("%d", &v);
sum -= num[v - 1].num;
num[v - 1].vis = 1;
}
sort(num, num + n, cmp);
for (int i = 0; i < n; i++) {
if (num[i].vis) {
if (sum >= num[i].num)
break;
sum += num[i].num;
m--;
}
}
for (int i = 0; i < m; i++)
sum *= 2;
printf("%lld\n", sum);
return 0;
}

D:

#include <stdio.h>
#include <string.h> const int MOD = 1000000007;
const int N = 2005;
const int M = 8050;
int n, k, num[N], dp[N][M][2], vis[N][M][2]; int solve(int len, int s, int flag) {
if (s>=(1<<k)) flag = 1;
if (vis[len][s][flag])
return dp[len][s][flag];
vis[len][s][flag] = 1;
dp[len][s][flag] = 0;
if (len == n) {
return dp[len][s][flag] = flag;
}
if (num[len] == 0) {
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + 2, flag)) % MOD;
if ((s&(1<<1)) == 0) {
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + 4, flag)) % MOD;
}
else {
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, 4, flag)) % MOD;
}
}
else {
if (num[len] == 2)
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + num[len], flag)) % MOD;
else {
if ((s&(1<<1)) == 0) {
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + num[len], flag)) % MOD;
}
else {
dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, num[len], flag)) % MOD;
}
}
}
return dp[len][s][flag];
} int main() {
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
printf("%d\n", solve(0, 0, 0));
return 0;
}

Coder-Strike 2014 - Round 2的更多相关文章

  1. 模拟 Coder-Strike 2014 - Round 1 A. Poster

    题目地址:http://codeforces.com/problemset/problem/412/A /* 模拟:题目没看懂,但操作很简单,从最近的一头(如果不在一端要先移动到一端)往另一头移动,顺 ...

  2. TCO 2014 Round 1C 概率DP

    TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...

  3. Coder-Strike 2014 - Round 1 D. Giving Awards

    题目的意思是 老板给n个人发工资,x欠y的工资,the joy of person x from his brand new money reward will be much less, 老板想避免 ...

  4. Coder-Strike 2014 - Round 1 E. E-mail Addresses

    此题题意就是匹配邮箱,提交时一直在test 14上WA,看了测试用例之后才发现计数用的int溢出,要用long long还是做题经验不够,导致此题未能通过,以后一定要考虑数据量大小 题意是找出邮件地址 ...

  5. Coder-Strike 2014 - Round 1 C. Pattern

    题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...

  6. Coder-Strike 2014 - Round 1 B. Network Configuration

    题目的意思就是给每台电脑的最大传输速度,可以限制每台电脑的最大速度,然后选择k台电脑,使这k台电脑有相同的速度,且这个速度最大 典型的贪心算法,电脑的速度排个序,选择第k大速度即可 #include ...

  7. Coder-Strike 2014 - Round 1 A. Poster

    主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...

  8. Google Code Jam 2014 Round 1B Problem B

    二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...

  9. Coder-Strike 2014 - Round 1(A~E)

    题目链接 A. Poster time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...

随机推荐

  1. POJ——1195Mobile phones(二维树状数组点修改矩阵查询)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17764   Accepted: 8213 De ...

  2. 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 SA+二分

    Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质 ...

  3. 大规模SOA系统中的分布事务思考

    首先是不建议采用XA两阶段提交方式去处理分布式事务,要知道要能够支持XA分布式事务,必须是要实现XA规范才可以,而Service本身是无状态的,如果这样去做了等于是把Service内部的东西暴露了出去 ...

  4. 【BZOJ1901】Dynamic Rankings(树套树,树状数组,主席树)

    题意:给定一个N个数的序列,要求维护一个数据结构支持以下两种操作: 1:将第X个数改成Y 2:查询第X到第Y个数里第K小的数是多少 n,m<=10000,a[i]<=10^9 思路:单点修 ...

  5. 10个JavaScript难点--摘抄

    1. 立即执行函数 立即执行函数,即Immediately Invoked Function Expression (IIFE),正如它的名字,就是创建函数的同时立即执行.它没有绑定任何事件,也无需等 ...

  6. 安装phpssdb扩展:

    安装 igbinary   扩展(安装phpssdb扩展时候要用到--enable-ssdb-igbinary): clone  https://github.com/igbinary/igbinar ...

  7. WEB学习 -相对定位、绝对定位、固定定位、z-index

    相对定位 相对定位,就是微调元素位置的.让元素相对自己原来的位置,进行位置调整. .不脱标,老家留坑,形影分离 也就是说相对定位不脱标,真实位置是在老家,只不过影子出去了,可以到处飘. 3.相对定位用 ...

  8. C#知识点总结:Monitor和Lock以及区别

    Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...

  9. js-关于微信页面分享(取消或打开)

    在微信二次开发中,我们会遇到页面可以分享或不能分享的情况(私人隐私页面不能.禁止分享) 1.禁止页面分享(取消微信开打页面的分享功能) <script> function onBridge ...

  10. 常用函数和STL

    #include <bits/stdc++.h> using namespace std; #define PI acos(-1.0) int main() { printf(" ...