I.Algorithm Choosing Mushrooms
链接:https://ac.nowcoder.com/acm/contest/908/I
题意:
Baby bear and his good friends are very fond of mushrooms. On this day, they go to 402 mushroom field together. Kuangyeye, the owner of the mushroom field, is very happy to see the children. He is going to give the children some mushrooms, so he takes them to a warehouse.
In the warehouse, there are N baskets in a row, numbered from 1 to N, with some mushrooms in each basket. Baby bear and his friends can take several baskets of mushrooms, but Kuangyeye has several requirements:
·Kuangyeye likes to be neat and tidy. He asks the children to take away only the consecutively numbered baskets when they take the mushrooms. This means that if the children choose the 4th, 5th and 6th baskets of mushrooms, they can't choose the 9th basket unless they also choose the 7th and 8th baskets.
·Kuangyeye likes all of them, so he asks each child to get the same number of mushrooms. This means that the total number of mushrooms the children take away must be P = k * M, where k is an integer and M is the total number of children.
·Kuangyeye made a record of the number of mushrooms in each basket. He asks the children not to put some mushrooms in other baskets or throw them away. This means that when the children take a basket of mushrooms, they must take away all the mushrooms in the basket.
Now given the number of mushrooms in a row of N baskets, please answer:
1. The maximum number of mushrooms that baby bear and his friends can take away.
2. The maximum number of baskets that baby bear and his friends can take away.
Please note that the answers to questions 1 and 2 May not come from the same situation!!!
思路:
用一个二维数组记录原数组的前缀和数组modm的值。
如果sum[j]%m == sum[i]%m 则(sum[j]-sum[i])%m == 0说明j-(i-1)篮子里的蘑菇是m的倍数。(sum为前缀和数组)
找到%m的每个余数去最左和最右的两个位置。%m为0时只用取最右的。
代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL;
const int MAXN = 2e6 + 10;
const int MOD = 1e9 + 7;
int n, m, k, t; LL fsum[MAXN];
int Po[MAXN][2]; int main()
{
memset(Po, -1, sizeof(Po));
scanf("%d%d", &n ,&m);
LL sum = 0;
for (int i = 1;i <= n;i++)
{
scanf("%lld", &fsum[i]);
fsum[i] += fsum[i-1];
}
for (int i = 1;i <= n;i++)
{
int lef = fsum[i] % m;
if (lef == 0)
{
Po[lef][0] = i;
continue;
}
if (Po[lef][0] == -1)
Po[lef][0] = i;
else
Po[lef][1] = i;
}
LL res1 = 0;
int res2 = 0;
for (int i = 1;i <= m;i++)
{
if (Po[i][1] == -1)
continue;
res1 = max(res1, fsum[Po[i][1]]-fsum[Po[i][0]]);
res2 = max(res2, Po[i][1]-Po[i][0]);
}
if (Po[0][0] != -1)
{
res1 = max(res1, fsum[Po[0][0]]);
res2 = max(res2, Po[0][0]);
} printf("%lld %d", res1, res2); return 0;
}
I.Algorithm Choosing Mushrooms的更多相关文章
- 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)
一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中
- CF219D. Choosing Capital for Treeland [树形DP]
D. Choosing Capital for Treeland time limit per test 3 seconds memory limit per test 256 megabytes i ...
- Evolutionary Computing: 2. Genetic Algorithm(1)
本篇博文讲述基因算法(Genetic Algorithm),基因算法是最著名的进化算法. 内容依然来自博主的听课记录和教授的PPT. Outline 简单基因算法 个体表达 变异 重组 选择重组还是变 ...
- Study on Algorithm of Selecting Safe Landing Area on Ground During Asteroid Soft Landing (EEIC2013 +161)
OUATTARA Sie, RUAN Xiaogang, Yan yan Institute of Artificial Intelligence and Robots, School of Elec ...
- A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning
A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning by Jason Brownlee on S ...
- HDU 4422 The Little Girl who Picks Mushrooms ( 模拟)
Problem Description It's yet another festival season in Gensokyo. Little girl Alice planned to pick ...
- 【codeforce 219D】 Choosing Capital for Treeland (树形DP)
Choosing Capital for Treeland Description The country Treeland consists of n cities, some pairs of t ...
- TIFF6 Packbit algorithm
“Packbits” from ISO 12369 参考TIFF 6.0 Specification,点击TIFF, Version 6.0: @Section 9: PackBits Compres ...
- Shine we together: A innovative dating site using 2012 Nobel Laureate Roth's algorithm
Abstract Our dating site introduced scoring and its related functionalities innovatively, conforming ...
随机推荐
- 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)
所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样. 基础拦截器操作: ...
- longtable 跨越多个页面时,如何在跨页时自动断行并加上横线及去掉页眉
参考: http://users.sdsc.edu/~ssmallen/latex/longtable.html 一般的,在首行后面加上 \endfirsthead\hline\endhead\hli ...
- Java 吃货联盟
import java.util.Scanner; public class Shao { private static final int[] dishNames = null; private ...
- String类中的equals是如何重写的
我们知道String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值. 首先几个知识点: 基本数据类型==比 ...
- hdu-5778 abs(暴力枚举)
题目链接: abs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Pro ...
- tf.stack和tf.unstack
import tensorflow as tf a = tf.constant([1,2,3]) b = tf.constant([4,5,6]) c1 = tf.stack([a,b],axis=0 ...
- 树莓派与 Python —— GPIO
首先来直观地认识树莓派提供的 40 个引脚(GPIO,general purpose i/o,接收外界输入,并向外界提供运算处理后的输出): 1. 安装 从远程库(repositories)中下载安装 ...
- pod lib lint 报错 Unable to find a specification for `AMap2DMap` depended upon by `DingtalkPod
执行 pod验证 报错如下 ➜ DingtalkPod git:(2.0.0) ✗ pod lib lint --sources='https://github.com/AloneMonkey/Mo ...
- oracle Instant Client install
Installation See the Instant Client Home Page for more information. Installation of ZIP files: 1. Do ...
- MySQL活动期间订单满600元并且在活动日期之前超过30天没有下过单_20161030
计算 活动期间订单满600元并且在活动日期之前超过30天没有下过单 首先拿到这个需求,首先需要明确活动日期区间 10.29-10.31,其次要取这个时间段内某天订单额最高的那天及订单额,再次需要判断这 ...