A

实际上我们for一遍就好。

坑点就是会爆int

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
long long ans1,ans2,a[maxn],b[maxn],c[maxn];
int n;
int main(){
while(cin>>n){
ans1 = -1;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
if(a[i]*b[i]*c[i]>ans1){
ans1 = a[i]*b[i]*c[i];
ans2 = i;
}
}
cout<<ans2<<endl;
}
}

B . 两数组找相同的元素

我们对于B的每一个元素,在A中进行二分判断是否存在即可。

也可以使用C++内带的.find函数

#include <cstdio>
#include <unordered_set>
#include <vector> using namespace std; int main(int argc, const char *argv[])
{
unordered_set<int> first_array;
int m, n;
scanf("%d %d", &m, &n);
int tmp;
for (int i = 0; i < m; i++) {
scanf("%d", &tmp);
first_array.emplace(tmp);
} vector<int> ans;
for (int i = 0; i < n; i++) {
scanf("%d", &tmp);
if (first_array.find(tmp) != first_array.end()) {
ans.push_back(tmp);
}
}
for (int i = 0; i < ans.size(); ++i) {
printf("%d%c", ans[i], i + 1 == ans.size() ? '\n' : ' ');
} return 0;
}

B . DAU统计

实际上我们对于每一个元素,如果这个元素之前并没有出现过,那么对答案的贡献就加一。

于是我们可以用hash每次O(1)的判断这个元素之前是否出现过即可。

也可以使用set去维护也可以。

// Copyright 2017 He Tianyi <hetianyi@bytedance.com>

// Compiler opts: g++ -g -std=c++11 -o dau -O2 -Wall -Werror dau.cc

#include <cstdint>

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <memory> static const size_t kMergeThreshold = 170000; class UserMap {
public:
UserMap() {
base_ = std::unique_ptr<std::vector<uint64_t>>(
new std::vector<uint64_t>());
} void Merge() {
std::vector<uint64_t> *result = new std::vector<uint64_t>();
result->reserve(base_->size() + delta_.size());
auto base_it = base_->begin();
auto delta_it = delta_.begin();
while (base_it != base_->end() || delta_it != delta_.end()) {
if (delta_it == delta_.end()) {
result->emplace_back(*base_it);
base_it++;
} else if (base_it == base_->end()) {
result->emplace_back(*delta_it);
delta_it++;
} else {
if (*base_it < *delta_it) {
result->emplace_back(*base_it);
base_it++;
} else {
result->emplace_back(*delta_it);
delta_it++;
}
}
}
base_.reset(result);
delta_.clear();
} bool PutIfAbsent(uint64_t uid) {
if (delta_.find(uid) != delta_.end()) {
return false;
}
if (std::binary_search(base_->begin(), base_->end(), uid)) {
return false;
}
delta_.insert(uid);
if (delta_.size() > kMergeThreshold) {
Merge();
}
return true;
} private:
std::unique_ptr<std::vector<uint64_t>> base_;
std::set<uint64_t> delta_;
}; int main(int argc, char** argv) {
uint64_t uid;
UserMap m;
uint32_t result = 0;
do {
std::cin >> uid;
if (uid > 0 && m.PutIfAbsent(uid)) {
result++;
}
} while (uid != 0);
std::cout << result << std::endl;
return 0;
}

D . 形式化计算

题面分为两个部分,计算部分和输出部分。

计算部分比较简单,我们对于每个符号进行判断即可。

计算部分结束之后,我们要处理输出。

输出我们需要对每个数字/符号单独输出。可以观察到,每个字符实际上都是一个矩阵,所以我们可以预处理出每个字符矩阵的样子,然后输出即可。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b;
char s[10];
char drawBoard[5][200];
void print1(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[1][startCol] = '*';
drawBoard[2][startCol] = '*';
drawBoard[3][startCol] = '*';
drawBoard[4][startCol] = '*';
startCol = startCol + 3;
}
void print2(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol] = '*';
drawBoard[3][startCol] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print3(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print4(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print5(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol+2] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol] = '*';
startCol = startCol + 5;
}
void print6(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print7(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print8(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print9(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void print0(int &startCol) {
drawBoard[0][startCol] = '*';
drawBoard[0][startCol+1] = '*';
drawBoard[0][startCol+2] = '*';
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
drawBoard[4][startCol+2] = '*';
startCol = startCol + 5;
}
void printjia(int &startCol) {
drawBoard[1][startCol+1] = '*';
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
drawBoard[3][startCol+1] = '*';
startCol = startCol + 5;
}
void printjian(int &startCol) {
drawBoard[2][startCol] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[2][startCol+2] = '*';
startCol = startCol + 5;
}
void printcheng(int &startCol) {
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+2] = '*';
startCol = startCol + 5;
}
void printchu(int &startCol) {
drawBoard[1][startCol+2] = '*';
drawBoard[2][startCol+1] = '*';
drawBoard[3][startCol] = '*';
startCol = startCol + 5;
}
void printequal(int &startCol) {
drawBoard[1][startCol] = '*';
drawBoard[1][startCol+1] = '*';
drawBoard[1][startCol+2] = '*';
drawBoard[1][startCol+3] = '*';
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+1] = '*';
drawBoard[3][startCol+2] = '*';
drawBoard[3][startCol+3] = '*';
startCol = startCol + 6;
}
void printdian(int &startCol) {
drawBoard[3][startCol] = '*';
drawBoard[3][startCol+1] = '*';
drawBoard[4][startCol] = '*';
drawBoard[4][startCol+1] = '*';
startCol = startCol + 4;
}
void drawNum(double x,int &startCol) {
char s[100];
memset(s,0,sizeof(s));
if (x-int(x) == 0) sprintf(s,"%d",int(x));
else if (x*10-int(x*10)==0) sprintf(s,"%.1lf",x);
else sprintf(s,"%.2lf",x); for (int i=0;i<strlen(s);++i) {
switch (s[i]) {
case '0':print0(startCol);break;
case '1':print1(startCol);break;
case '2':print2(startCol);break;
case '3':print3(startCol);break;
case '4':print4(startCol);break;
case '5':print5(startCol);break;
case '6':print6(startCol);break;
case '7':print7(startCol);break;
case '8':print8(startCol);break;
case '9':print9(startCol);break;
case '.':printdian(startCol);break;
case '-':printjian(startCol);break;
}
}
}
int main() { scanf("%d %s %d",&a,s,&b); for (int i=0;i<5;++i)
for (int j=0;j<200;++j)
drawBoard[i][j] = ' ';
double c=0;
int startCol=0;
drawNum(a,startCol); switch (s[0]) {
case '+':c = a+b; printjia(startCol);break;
case '-':c = a-b; printjian(startCol);break;
case '*':c = a*b; printcheng(startCol);break;
case '/':c = 1.0*a/b; printchu(startCol);break;
}
drawNum(b,startCol);
printequal(startCol);
drawNum(c,startCol);
for (int i=0;i<5;++i,cout<<endl)
for (int j=0;j<startCol;++j)
cout<<drawBoard[i][j]; return 0;
}

E . 任务执行策略

动态规划题。

首先把三角形翻转一下,倒着来考虑每个元素。

dp[i][j][k]表示考虑到第(i,j)个,当前选取了k个元素的最大值。

前缀和维护最大值,就可以把转移优化到O(1)。

#include <algorithm>
#include <cassert>
#include <cstring>
#include <cstdio> const int N = 60;
const int M = 500 + 10; int dp[N][N][M], sum[N][N], a[N][N], n, m; int main() {
assert(scanf("%d%d", &n, &m) == 2);
assert(1 <= n && n <= 50);
assert(1 <= m && m <= 500);
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= i; ++ j) {
assert(scanf("%d", &a[i][j]) == 1);
assert(0 <= a[i][j] && a[i][j] <= 1000);
}
} for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= i; ++ j) {
sum[i][j] = sum[i][j - 1] + a[n - j + 1][i - j + 1];
}
} memset(dp, 200, sizeof(dp));
for (int i = 0; i <= n; ++ i) {
dp[i][0][0] = 0;
}
for (int i = 1; i <= n; ++ i) {
for (int j = i; j >= 0; -- j) {
for (int k = j; k <= m; ++ k) {
dp[i][j][k] = std::max(dp[i][j + 1][k],
dp[i - 1][std::max(0, j - 1)][k - j] + sum[i][j]);
}
}
}
printf("%d\n", dp[n][0][m]);
return 0;
}

喵哈哈村的魔法考试 Round 16 (Div.2) 比赛题解的更多相关文章

  1. 喵哈哈村的魔法考试 Round #7 (Div.2) 题解

    喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...

  2. 喵哈哈村的魔法考试 Round #2 (Div.2) 题解

    喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...

  3. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

  4. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  5. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  6. 喵哈哈村的魔法考试 Round #1 (Div.2)

    比赛地址:http://qscoj.cn/contest/2/ 都是中文题,这里不在详述题意 A.喵哈哈村的魔法石 分析:暴力求解 #include<iostream> #include& ...

  7. 喵哈哈村的魔法考试 Round #1 (Div.2) ABCD

    官方题解: http://www.cnblogs.com/qscqesze/p/6418555.html#3623453 喵哈哈村的魔法石 描述 传说喵哈哈村有三种神奇的魔法石:第一种魔法石叫做人铁石 ...

  8. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

    有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...

  9. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

随机推荐

  1. windows系统实现mysql数据库数据库主从复制

    环境: master mysql服务器 192.168.8.201 slave mysql服务器 192.168.8.89 目标: 实现主从复制 1.将MySQL5.5安装文件分别拷贝到两台机器的c盘 ...

  2. centos6.5环境下zookeeper-3.4.6集群环境部署及单机部署详解

    centos6.5环境下Zookeeper-3.4.6集群环境部署 [系统]Centos 6.5 集群部署 [软件]准备好jdk环境,此次我们的环境是open_jdk1.8.0_101 zookeep ...

  3. nagios系列(六)之nagios实现对服务器cpu温度的监控

    1.安装硬件传感器监控软件sensors yum install -y lm_sensors* 2.运行sensors-detect进行传感器检测 ##一路回车即可 Do you want to ov ...

  4. 转载:gc的概念,如果A和B对象循环引用,是否可以被GC?

    原文:https://www.cnblogs.com/zhchoutai/p/6784929.html ①首先说一下,GC里边在JVM其中是使用的ROOT算法,ROOT算法,什么称作为ROOT呢,就是 ...

  5. 大道至简、大智若愚—GO语言最佳详解实践

      导读:2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Gol ...

  6. java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

    在运行java程序时,遇到问题"Could not create the Java Virtual Machine."如下截图:

  7. OracleOCP认证 之 Linux基础

    Linux 基础 一.SHELL 1: Shell 简介 shell 是用户和Linux 操作系统之间的接口.Linux 中有多种shell, 其中缺省使用的是bash. Linux 系统的shell ...

  8. django----文件配置

    静态路径配置 STATIC_URL = '/static/' #这个配置就相当于下面配置的别名,如果这里的名字修改了就按照这里的名字去导入 STATICFILES_DIRS = [ os.path.j ...

  9. 你可能不知道的git clean

    git clean是干啥的? git clean可以帮你清理workspace中未被git版本控制的文件,比如临时文件,构建出来的二进制文件. 使用方法 如果你的clean.requireForce项 ...

  10. python算法双指针问题:两个有序数组的合并

    最近在看<你也能看得懂的python算法书>, 自己来实现一下里面的算法吧. 有书里的有所不同. 比如这个题目,我的实现如下: from django.test import TestCa ...