奶牛

牛客网-分苹果(网易)

北城余情 提交于 2020-01-11 08:18:59
题目描述 n 只奶牛坐在一排,每个奶牛拥有 a i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 a i (1 <= ai <= 100)。 输出描述: 输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。 示例1 输入 4 7 15 9 5 输出 3 解题思路: (1)首先计算所有奶牛拥有的苹果之和,除以奶牛个数,若无余数,说明是可以平分的,若有余数,返回-1; (2)因为每一次只能从奶牛身上拿走两个苹果,所以需要计算每个奶牛拥有的苹果数减去平均数,看这个差是否为2的倍数,若不是,返回-1;若是,统计所有差大于0(或者小于0)的差之和,然后除以2,则为最小需要移动的次数 7 15 9 5 average=9; -2 6 0 -4 正数之和等于负数之和的绝对值 找到所有为正数的值的和,为6, 6/2=3 代码如下: #include<iostream> #include<vector> using namespace std; int Minimal(vector<int> vec

网易编程题——分苹果

我怕爱的太早我们不能终老 提交于 2020-01-11 03:06:33
题目描述 n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。 输出描述: 输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。 示例1 输入 4 7 15 9 5 输出 3 #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> nums; int total = 0; while (n--) { int tmp; cin >> tmp; total += tmp; nums.push_back(tmp); } int count = 0; // 不能均分 if (total % nums.size() != 0) { cout << -1 << endl; return 0; } else { int average = total / nums.size(); /

网易2016校招内推笔试编程题

非 Y 不嫁゛ 提交于 2020-01-10 18:38:38
1、下厨房 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 输入描述: 每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。 输出描述: 输出一行一个数字表示完成所有料理需要多少种不同的材料。 输入例子: BUTTER FLOUR HONEY FLOUR EGG 输出例子: 4 读入所有材料,去掉其中重复的即可,可理解为容器的去重问题。stl中容器的排序也支持字符串排序,所以先将vector中的字符串排序,相同的材料名就变成相邻的,去重,容器剩下的大小即为所需不同材料数。 #include <iostream> #include <deque> #include <string> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; int main() { vector<string> mats; char tmp[50]; while(scanf("%s",tmp)!=EOF) { mats.push_back(tmp); } sort(mats.begin(),mats.end())

分苹果(网易)

对着背影说爱祢 提交于 2020-01-10 07:39:05
题目描述 n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。 输出描述: 输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。 示例1 输入 4 7 15 9 5 输出 3 分析:1、最后所有奶牛得到的苹果相同,所以就是苹果总数除以奶牛数,最后大家都是平均苹果数,如果有余数,就输出-1;2、奶牛间移动苹果是两个移一次,所以当有奶牛的苹果数与平均苹果数的差值不是2的整数倍,那么说明无法移动成功,输出-1,如果差值都是2的整数倍,就计算差值大于0的(也就是大于平均苹果数的)那些差值的和,最后除以2就行。 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int

BZOJ 1652: [USACO06FEB]奶牛零食Treats for the Cows

落花浮王杯 提交于 2019-12-30 22:52:31
和noip2005矩阵取数游戏是几乎相同的题,在洛谷上只有黄题,但是我觉得如果对于只做过基础的区间dp的同学来说,能自己推出这题的状态,那是很厉害的了,状态有点不一样, # include <bits/stdc++.h> using namespace std ; const int N = 2e3 + 5 ; int n ; int a [ N ] , f [ N ] [ N ] ; int main ( ) { scanf ( "%d" , & n ) ; for ( register int i = 1 ; i <= n ; ++ i ) scanf ( "%d" , & a [ i ] ) ; for ( register int i = 1 ; i <= n ; ++ i ) f [ i ] [ i ] = a [ i ] * n ; for ( register int l = 2 ; l <= n ; ++ l ) for ( register int i = 1 ; i + l - 1 <= n ; ++ i ) { int j = i + l - 1 ; f [ i ] [ j ] = max ( f [ i + 1 ] [ j ] + a [ i ] * ( n - ( j - i ) ) , f [ i ] [ j - 1 ] + a [ j ] * ( n

【JZOJ3920】噪音

假装没事ソ 提交于 2019-12-10 17:17:11
description FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的。FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚。第i头奶牛选择走进第p[i]个牛棚。由于奶牛是群体动物,所以每当一头奶牛x进入牛棚y之后,牛棚y里的所有奶牛们都会喊一声“欢迎欢迎,热烈欢迎”,由于声音很大,所以产生噪音,产生噪音的大小等于该牛棚里所有奶牛(包括刚进去的奶牛x在内)的数量。FJ很讨厌噪音,所以FJ决定最多可以使用K次“清空”操作,每次“清空”操作就是选择一个牛棚,把该牛棚里所有奶牛都清理出去,那些奶牛永远消失。“清空”操作只能在噪音产生后执行。现在的问题是:FJ应该选择如何执行“清空”操作,才能使得所有奶牛进入牛棚后所产生的噪音总和最小? analysis \(DP\) ,考虑预处理辅助数组 \(g[i][j]\) 表示 \(i\) 牛棚分割 \(j\) 次的最小贡献 对于 \(num[j]\) ,当然尽量分割成相等的 \(k+1\) 份,每一份取等差数列和的贡献 就有 \(num[j]\mod(j+1)\) 段值为 \({num[j]\over{j+1}}+1\) ,剩下的段都是 \({num[j]\over{j+1}}\) 再设 \(f[i][j]\) 表示前 \(i\) 个牛棚分割 \(j\) 次的最小值, \(f[i][j]\) 可从 \

P2954([USACO09OPEN]移动牛棚Grazing2,dp)

白昼怎懂夜的黑 提交于 2019-12-05 20:07:33
题意概括 有 \(n\) 个奶牛, \(s\) 个牛棚,要求每个奶牛只能距离为 \(d\) 或 \(d+1\) , \(d=(n-1)/(s-1)\) ,问奶牛的最小移动距离 先把奶牛的位置排个序经过思考可以发现第一头奶牛在牛棚 \(1\) ,第 \(n\) 头奶牛在牛棚 \(s\) ,奶牛间的距离只能是 \(d\) 或 \(d+1\) ,且题目要求距离尽可能大那距离为 \(d\) 的数量和距离为 \(d+1\) 的数量就可以固定下来了. \(f[i][j]\) 表示前 \(i\) 头奶牛,有 \(j\) 头与上一头的距离为 \(d+1\) 的最小移动距离 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int N=1600; int n,s,m,d,p[N]; int f[N][N]; int main(){ // freopen("s.in","r",stdin); scanf("%d%d",&n,&s); d=(s-1)/(n-1); m=s-d*(n-1); for(int i=1;i<=n;++i)scanf("%d",&p[i]); sort(p+1,p+n+1); memset(f,0x3f,sizeof(f)); f[1

疯狂的奶牛系统开发模式APP源码

蹲街弑〆低调 提交于 2019-12-04 23:57:34
  疯狂的奶牛系统开发梁小姐【136威6015电2653】,疯狂的奶牛软件开发APP,疯狂的奶牛系统定制开发APP,疯狂的奶牛软件开发系统搭建,疯狂的奶牛模式介绍开发,疯狂的奶牛软件APP开发,疯狂的奶牛模式介绍开发系统,疯狂的奶牛系统定制开发APP,疯狂的奶牛软件开发系统   温馨提示:本文仅模式参考作用,我们是专业开发类似的系统,玩嘉勿扰!谢谢   一、疯狂的奶牛模式介绍   1、下载”疯狂的奶牛”APP   2、充值主流数字货币(USDT/BTC/ETH)   3、摇一摇,摇出一头奶牛,定价100USDT~5000USDT   4、预付20%定金,开启养牛模式,每天0.8%静态收益(牛奶月收益24%)   5、5-25天奶牛长大后,支付80%尾款后即可挂牌售出,2-6天成功出售给新主人。   6、首次养牛可以领养价值100USDT或500USDT的奶牛,每一头牛成功卖出可领养价值更高的奶牛,奶牛价格分为7个等级(100USDT/500USDT/1000USDT/2000USDT/3000USDT/4000 USDT/5000USDT)   7、当一头奶牛成功卖出可继续购买当前价格的奶牛,也可以选择下一个级别的奶牛,一旦升级成功,成功售出后不可购买低等级奶牛。   预付款+尾款+静态收益是在牛栏中,不可自由买卖,可以玩游戏   8、开启新一轮养牛,支付20%,即可解除上一轮本金

扎堆平台开发系统APP

巧了我就是萌 提交于 2019-12-04 08:31:31
------------恢复内容开始------------      扎堆系统开发找【魏生191-5743-0731微电】想了解更多系统开发可复制号码搜索,海生科技,秉承为您服务,扎堆app开发,扎堆模式开发,扎堆源码开发,扎堆平台开发,软件开发,扎堆定制开发,扎堆开发,扎堆开发多少钱。   ——本司是广州最大的专业软件开发公司,非平台方,玩.家勿扰——   扎堆投资说明:   1小午一头价格6元   2营养液一瓶1元   3奶牛产出的原产奶售价1元   扎堆玩法说明:   一头小牛升级到母牛需要19个营养液升级为奶牛,一头奶牛原产奶的产量为24桶台随时卖出提观秒到账   扎堆收益以及推广等级说明:   等级1产量:一头奶牛一天产1桶\   等级2产量:一天产1.2桶   等级3产量:一天产2桶   等级4产量:一天产4桶   等级5产量:一天产8桶   等级6产量:一天产12桶   (升级为等2级后激活团队7代收益)   新人攻略:   新人注册后先购买两头小牛,加上平台赠送的一头共有3头。再购买30桶营养奶升级成奶的牛。 ------------恢复内容结束------------ 来源: https://www.cnblogs.com/191-5743-0731/p/11848532.html

奶牛抗议 DP 树状数组

老子叫甜甜 提交于 2019-12-04 06:53:28
奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到 \(DP\) ,设 \(f[i]\) 表示为在第 \(i\) 位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i]-sum[j]\ge0) \] \(O(n^2)\) 过不了,考虑优化 移项得: \[ f[i]=\sum f[j]\;(j< i,sum[i]\ge sum[j]) \] 这时候我们发现相当于求在 \(i\) 前面并且前缀和小于 \(sum[i]\) 的所有和,这就可以用一个树状数组优化了,在树状数组维护下标为 \(sum[i]\) , \(f[i]\) 的前缀和。对于每个 \(f[i]\) 即为树状数组上 \(sum[i]\) 的前缀和。 这里需要注意的是前缀和可能为负,而树状数组下标不能为负,所以我们要离散化一下。 #include <cstdio> #include <algorithm> using namespace std; #define MAXN 100010 #define lowbit(x) ((x)&(-(x))) #define MOD 1000000009 int n,sum[MAXN],s; int sum_sort[MAXN+1]; int tre[MAXN+1]; inline void add(int x, int val){ while(x<