Coder-Strike 2014 - Round 2
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的更多相关文章
- 模拟 Coder-Strike 2014 - Round 1 A. Poster
题目地址:http://codeforces.com/problemset/problem/412/A /* 模拟:题目没看懂,但操作很简单,从最近的一头(如果不在一端要先移动到一端)往另一头移动,顺 ...
- TCO 2014 Round 1C 概率DP
TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...
- 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, 老板想避免 ...
- Coder-Strike 2014 - Round 1 E. E-mail Addresses
此题题意就是匹配邮箱,提交时一直在test 14上WA,看了测试用例之后才发现计数用的int溢出,要用long long还是做题经验不够,导致此题未能通过,以后一定要考虑数据量大小 题意是找出邮件地址 ...
- Coder-Strike 2014 - Round 1 C. Pattern
题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...
- Coder-Strike 2014 - Round 1 B. Network Configuration
题目的意思就是给每台电脑的最大传输速度,可以限制每台电脑的最大速度,然后选择k台电脑,使这k台电脑有相同的速度,且这个速度最大 典型的贪心算法,电脑的速度排个序,选择第k大速度即可 #include ...
- Coder-Strike 2014 - Round 1 A. Poster
主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...
- Google Code Jam 2014 Round 1B Problem B
二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...
- Coder-Strike 2014 - Round 1(A~E)
题目链接 A. Poster time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputou ...
随机推荐
- BZOJ 4821 [Sdoi2017]相关分析 ——线段树
打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...
- BZOJ1875 [SDOI2009]HH去散步 【dp + 矩阵优化】
题目 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢变 ...
- Json操作(汇总)
利用:com.fasterxml.jackson 原文地址:https://blog.csdn.net/joyous/article/details/9448461 说明:Map转化为Json:创建J ...
- 快速沃尔什变换 FWT
FWT 是处理位运算卷积的有效工具…… 原理……不懂,但背板子很简单,在这贴博客是为了放个模板,免得到时候忘记. 其中0为或卷积,1为与卷积,2为异或卷积…… void FWT(long long a ...
- P1473 校门外的树3
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……如今学校决定在某个时刻在某一段种上一 ...
- Firmware 加载原理分析【转】
转自:http://blog.csdn.net/dxdxsmy/article/details/8669840 [-] 原理分析 实现机制 总结 前言 前段时间移植 wifi 驱动到 Androi ...
- 43深入理解C指针之---指针与树
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- CDN或负载均衡或WAF,后端服务器获取真实IP
问题起因: 1. 后端PHP的$_SERVER["REMOTE_ADDR"]个别服务器获取不到真实IP 2. iptables 和 悬镜 等工具,设置IP黑名单不起作用 简单点说, ...
- python笔记4:高级特性
4 高级特性 4.1 切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...
- Java开发者使用C++写程序踩的坑
笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...