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

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

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

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

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

代码:

A:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int n, m, Min, Max, num[105];
  5.  
  6. bool judge() {
  7. int f1 = 0, f2 = 0;
  8. for (int i = 0; i < m; i++) {
  9. if (num[i] < Min || num[i] > Max)
  10. return false;
  11. if (num[i] == Min) f1--;
  12. if (num[i] == Max) f2--;
  13. }
  14. int yu = n - m;
  15. if (!f1) yu--;
  16. if (!f2) yu--;
  17. if (yu < 0) return false;
  18. return true;
  19. }
  20.  
  21. int main() {
  22. scanf("%d%d%d%d", &n, &m, &Min, &Max);
  23. for (int i = 0; i < m; i++)
  24. scanf("%d", &num[i]);
  25. if (judge()) printf("Correct\n");
  26. else printf("Incorrect\n");
  27. return 0;
  28. }

B:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. const int N = 20005;
  5.  
  6. int n, m, k, vis[N][15], sum[15], s[N][15], ans[N];
  7.  
  8. int main() {
  9. scanf("%d%d%d", &n, &m, &k);
  10. for (int i = 0; i < n; i++)
  11. for (int j = 0; j < m; j++) {
  12. scanf("%d", &vis[i][j]);
  13. }
  14. int x, y;
  15. while (k--) {
  16. scanf("%d%d", &x, &y);
  17. x--; y--;
  18. sum[y]++;
  19. s[x][y]++;
  20. }
  21. for (int i = 0; i < n; i++) {
  22. for (int j = 0; j < m; j++) {
  23. if (vis[i][j])
  24. ans[i] += (sum[j] - s[i][j]);
  25. }
  26. }
  27. for (int i = 0; i < n - 1; i++)
  28. printf("%d ", ans[i]);
  29. printf("%d\n", ans[n - 1]);
  30. return 0;
  31. }

C:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int N = 10000005;
  7. int n, m;
  8. long long sum, Max, vis[N];
  9. struct Num {
  10. long long num;
  11. int vis;
  12. } num[N];
  13.  
  14. bool cmp(Num a, Num b) {
  15. return a.num > b.num;
  16. }
  17.  
  18. int main() {
  19. scanf("%d%d", &n, &m);
  20. for (int i = 0; i < n; i++) {
  21. scanf("%lld", &num[i].num);
  22. sum += num[i].num;
  23. Max = max(Max, num[i].num);
  24. }
  25. int v;
  26. for (int i = 0; i < m; i++) {
  27. scanf("%d", &v);
  28. sum -= num[v - 1].num;
  29. num[v - 1].vis = 1;
  30. }
  31. sort(num, num + n, cmp);
  32. for (int i = 0; i < n; i++) {
  33. if (num[i].vis) {
  34. if (sum >= num[i].num)
  35. break;
  36. sum += num[i].num;
  37. m--;
  38. }
  39. }
  40. for (int i = 0; i < m; i++)
  41. sum *= 2;
  42. printf("%lld\n", sum);
  43. return 0;
  44. }

D:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. const int MOD = 1000000007;
  5. const int N = 2005;
  6. const int M = 8050;
  7. int n, k, num[N], dp[N][M][2], vis[N][M][2];
  8.  
  9. int solve(int len, int s, int flag) {
  10. if (s>=(1<<k)) flag = 1;
  11. if (vis[len][s][flag])
  12. return dp[len][s][flag];
  13. vis[len][s][flag] = 1;
  14. dp[len][s][flag] = 0;
  15. if (len == n) {
  16. return dp[len][s][flag] = flag;
  17. }
  18. if (num[len] == 0) {
  19. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + 2, flag)) % MOD;
  20. if ((s&(1<<1)) == 0) {
  21. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + 4, flag)) % MOD;
  22. }
  23. else {
  24. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, 4, flag)) % MOD;
  25. }
  26. }
  27. else {
  28. if (num[len] == 2)
  29. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + num[len], flag)) % MOD;
  30. else {
  31. if ((s&(1<<1)) == 0) {
  32. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, s + num[len], flag)) % MOD;
  33. }
  34. else {
  35. dp[len][s][flag] = (dp[len][s][flag] + solve(len + 1, num[len], flag)) % MOD;
  36. }
  37. }
  38. }
  39. return dp[len][s][flag];
  40. }
  41.  
  42. int main() {
  43. scanf("%d%d", &n, &k);
  44. for (int i = 0; i < n; i++)
  45. scanf("%d", &num[i]);
  46. printf("%d\n", solve(0, 0, 0));
  47. return 0;
  48. }

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. BZOJ 4821 [Sdoi2017]相关分析 ——线段树

    打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...

  2. BZOJ1875 [SDOI2009]HH去散步 【dp + 矩阵优化】

    题目 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变 ...

  3. Json操作(汇总)

    利用:com.fasterxml.jackson 原文地址:https://blog.csdn.net/joyous/article/details/9448461 说明:Map转化为Json:创建J ...

  4. 快速沃尔什变换 FWT

    FWT 是处理位运算卷积的有效工具…… 原理……不懂,但背板子很简单,在这贴博客是为了放个模板,免得到时候忘记. 其中0为或卷积,1为与卷积,2为异或卷积…… void FWT(long long a ...

  5. P1473 校门外的树3

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述  校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……如今学校决定在某个时刻在某一段种上一 ...

  6. Firmware 加载原理分析【转】

    转自:http://blog.csdn.net/dxdxsmy/article/details/8669840 [-] 原理分析 实现机制 总结   前言 前段时间移植 wifi 驱动到 Androi ...

  7. 43深入理解C指针之---指针与树

    一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...

  8. CDN或负载均衡或WAF,后端服务器获取真实IP

    问题起因: 1. 后端PHP的$_SERVER["REMOTE_ADDR"]个别服务器获取不到真实IP 2. iptables 和 悬镜 等工具,设置IP黑名单不起作用 简单点说, ...

  9. python笔记4:高级特性

    4 高级特性 4.1  切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...

  10. Java开发者使用C++写程序踩的坑

    笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...