美团2018年CodeM大赛-资格赛 分数 暴力模拟
链接:https://www.nowcoder.com/acm/contest/138/D
来源:牛客网
比如说,资格赛一共3轮,三轮的权重分别为30%, 30%, 40%。在第一轮中,小胖获得了300分,最高分也为300分。在第二轮中,小胖获得了0分,最高分也为0分。在第三轮中,小胖获得了150分,最高分为300分,那么小胖的总分为(300/300)*30%+0*30%+(150/300)*40%=0.5。
一共有n位选手参加了比赛,其中成绩最高的k位选手能够晋级到初赛。如果有多人在分数线上同分,那么系统会随机在这些同分的人中选取,选满k个晋级为止。
小胖现在知道了每个选手每场比赛的成绩,但是由于他的疏忽,其中的某个人某场比赛的成绩消失了。所以更多人出线的情况变得未知起来。现在只知道成绩一定是0到C之间的一个整数(包含0和C)。
小胖想知道对于每个人的出线情况是怎么样的,也就是一定能出线,一定不能出线还是有可能出线。
输入描述:
第一行四个正整数n,m,k,C (m <= 6, k <= n <= 500, C <= 500)。
接下来一行m个整数w
1
, w
2
, ..., w
m
,表示每场比赛的权重,第i场比赛的权重为w
i
/(w
1
+w
2
+...+w
m
),保证w
i
>= 0且1 <= w
1
+ w
2
+ ... + w
m
<= 1000。
接下来n行每行m个整数,第i个整数表示这个选手在第i场比赛中获得的成绩。如果这个数字为-1表示这个数据丢失,保证恰好有一个-1。
输出描述:
n行每行输出一个1到3之间的整数。1表示一定出线,2表示一定不出线,3表示可能出线。
输入例子:
4 2 2 100
1 1
100 99
70 70
40 -1
100 39
输出例子:
1
3
3
2
-->
输出
1
3
3
2 一个大暴力模拟题,虽然很容易写,但是真的很容易出错。。。
开始直接按照题目意思模拟,结果wa到炸,后来看了别人的博客将所有牵扯到乘法的地方换成除法总算过了。
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define debug(a) cout << #a << " " << a << endl
using namespace std;
const int maxn = 1e3;
const int mod = 1e9 + 7;
typedef long long ll;
const int N = 505;
bool cmp( ll x, ll y ) {
return x > y;
}
ll sx, sy, n, m, k, C;
ll s[maxn], t[maxn], sw[maxn], w[maxn], a[maxn][maxn], sm[maxn], c1[maxn], c2[maxn];
int main() {
memset( c1, 0, sizeof(c1) );
memset( c2, 0, sizeof(c2) );
cin >> n >> m >> k >> C;
for( ll i = 0; i < m; i ++ ) {
cin >> w[i];
}
for( ll i = 0; i < n; i ++ ) {
for( ll j = 0; j < m; j ++ ) {
cin >> a[i][j];
if( a[i][j] == -1 ) {
sx = i, sy = j;
}
}
}
for( ll c = 0; c <= C; c ++ ) {
a[sx][sy] = c;
for( ll i = 0; i < m; i ++ ) {
sm[i] = 0;
for( ll j = 0; j < n; j ++ ) {
sm[i] = max( sm[i], a[j][i] );
}
}
for( ll i = 0; i < m; i ++ ) {
sw[i] = w[i];
if( sm[i] == 0 ) {
sw[i] = 0;
continue;
}
for( ll j = 0; j < m; j ++ ) {
if( i != j && sm[j] != 0 ) {
sw[i] *= sm[j]; //将所有的除法换成乘法,仔细思考在这里除法和乘法意义相同
}
}
}
for( ll i = 0; i < n; i ++ ) {
s[i] = 0;
for( ll j = 0; j < m; j ++ ) {
s[i] += a[i][j] * sw[j];
}
t[i] = s[i];
}
sort( s, s + n, cmp );
for( ll i = 0; i < n; i ++ ) {
if( t[i] >= s[k-1] ) {
c1[i] ++; //一定行的个数
}
if( n != k && t[i] <= s[k] ) {
c2[i] ++; //一定不行的个数
}
}
}
for( ll i = 0; i < n; i ++ ) {
if( c2[i] == 0 ) {
puts("1");
} else if( c1[i] == 0 ) {
puts("2");
} else {
puts("3");
}
}
return 0;
}
美团2018年CodeM大赛-资格赛 分数 暴力模拟的更多相关文章
- 美团2018年CodeM大赛-资格赛
https://www.nowcoder.com/acm/contest/138#question A.下单 水题…… B.可乐 题意:求期望 代码: #include<iostream> ...
- 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)
美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...
- 美团2018年CodeM大赛-初赛B轮 C题低位值
试题链接:https://www.nowcoder.com/acm/contest/151/C 定义lowbit(x) =x&(-x),即2^(p-1) (其中p为x的二进制表示中,从右向左数 ...
- 美团2017年CodeM大赛-初赛B轮-黑白树
https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...
- 美团2017年CodeM大赛-初赛B轮 黑白树 (树形dp)
大意: 给定树, 初始每个点全为白色, 点$i$有权值$k_i$, 表示选择$i$后, 所有距离$i$小于$k_i$的祖先(包括i)会变为黑色, 求最少选多少个点能使所有点变为黑色. 链上情况的话, ...
- 美团2017年CodeM大赛-初赛A轮 C合并回文子串
区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...
- AOJ.849 分数 (暴力)
AOJ.849 分数 (暴力) 题意分析 每次枚举分子,然后根据给出的分数值,推算出来分母,然后取分母上下几个数进行进一步计算,看看哪个更接近. 一开始想着直接枚举分子和分母,复杂度爆炸... 代码总 ...
- hdu 6082 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛 )
度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B
P2 : Heshen's Account Book Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description H ...
随机推荐
- DesignPattern系列__01SingletonResponsibility
单一职责原则 单一职责原则:一个类应该只有一个原因引起改变,即一个类应该只负责一个业务逻辑. 问题由来:类T负责t1, t2两个职责,当因为t1j对类T修改的时候,可能导致类T出现问题而影响职责t2. ...
- 雪花算法【分布式ID问题】【刘新宇】
分布式ID 1 方案选择 UUID UUID是通用唯一识别码(Universally Unique Identifier)的缩写,开放软件基金会(OSF)规范定义了包括网卡MAC地址.时间戳.名字空间 ...
- 【pycharm】Pycharm对 axios语法的支持问题
问题: 解决办法: 1,找到pychar的settings 2,ECMAScript6
- 自练Eclipse搭建SSH全自动注解博客项目笔记
1.创建一个动态的java项目 2.导入搭建所需要的jar包 3.配置web.xml文件 1).头文件 2).struts2的拦截器 3).定位加载Spring容器的配置文件 4).监听 5). 6) ...
- 什么?小程序实时语音识别你还在痛苦的对接科大讯飞?百度Ai识别?
前言 微信小程序,说不上大火,但是需求还是不少的.各大企业都想插一足 于是前端同学就有事情做了. 需求 我需要录音 我边说话边识别,我要同声传译,我要文字转语音,还要萝莉音 我:??? 正文 一开始, ...
- ajax具体实现学习记录
记录自己对ajax\的理解, 首先要明白ajax是为了解决什么问题,简单来讲就是为了局部刷新页面,而不刷新整个界面.就比如现在有一个实时热度的显示,它是不断变化的,所以你肯定要不停的从数据库当中获取热 ...
- 夯实Java基础(四)——面向对象之多态
1.多态介绍 面向对象三大特征:封装.继承.多态.多态是Java面向对象最核心,最难以理解的内容.从一定角度来看,封装和继承几乎都是为多态而准备的. 多态就是指程序中定义的引用变量所指向的具体类型和通 ...
- 【译】尝试使用Nullable Reference Types
随着.NET Core 3.0 Preview 7的发布,C#8.0已被认为是“功能完整”的.这意味着它们的最大亮点Nullable Reference Types,在行为方面也被锁定在.NET Co ...
- 手写Struts,带你深入源码中心解析
个人剖析,不喜勿喷 扫码关注公众号,不定期更新干活 在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在 ...
- 一文了解:Redis过期键删除策略
Redis过期键删除策略 Redis中所有的键都可以设置过期策略,就像是所有的键都可以上"生死簿",上了生死簿的键到时间后阎王就会叉掉这个键.同一时间大量的键过期,阎王就会忙不过来 ...