ural 1818 Fair Fishermen

news/2024/11/16 8:49:44/

题意:

  有n个人分鱼,第一个人先来拿,检查一下总数,如果不能恰好分成n份,则扔掉多余的部分,然后拿走自己应得的1/n,第二个人也重复这个步骤,直到第n个人,然后告诉你每次扔掉鱼的数量,求一开始最少有多少鱼。

 

方法:

  对于例子

  4

  1 1 1 2

  假设第三个人拿完以后的状态是还有X条鱼,设X = A[n]+K = 2+K,那么要满足X%(N-1)==0,且K的出现不会影响多余鱼的条数,也就是说,把这个K单独当成一部分,它可以正好分给n个人1次,那我们现在要找到这个最小的K,易知最小的K就是N*(N-1-A[N]%(N-1)),这样我们就推出了X,带入得X=6。

  则第三个人拿之前的个数就是Y = X/(N-1)*N+a[3],设Z是第二个人拿完之后的条数,假设Z = Y + K2,和上一次要求一样,则K2=N^2*(N-1-Y%(N-1)),系数是N^2,这样可以保证它下面2层都正好足够分给N个人,且不可能存在比这个更小的满足条件的系数。

  其实还是有点小混乱,先记录下来,回头脑袋清醒了再来研究一番~

代码:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main{
 5     static int[]a = new int[2013];
 6     public static BigInteger V(int v){
 7         return BigInteger.valueOf(v);
 8     }
 9     public static void main(String[] args){
10         Scanner cin = new Scanner(System.in);
11         int n = cin.nextInt();
12         for(int i=0;i<n;i++){
13             a[i] = cin.nextInt();
14         }
15         BigInteger ans=V(a[n-1]),now=V(n),mod=V(n-1);
16         for(int i = n-2;i >= 0;i--){
17             int dif = ans.mod(mod).intValue();
18             if(dif!=0) dif = n-1-dif;
19             ans = ans.add(now.multiply(V(dif))).divide(mod).multiply(V(n)).add(V(a[i]));
20             System.out.println(ans);
21             now = now.multiply(V(n));
22         }
23         if(ans.equals(V(0))) ans = now;
24         System.out.println(ans);
25     }
26 }
ural 1818

 

  

 

转载于:https://www.cnblogs.com/SolarWings/p/3439545.html


http://www.ppmy.cn/news/244197.html

相关文章

【BZOJ1818】内部白点

链接&#xff1a;BZOJ1818 解法&#xff1a;树状数组 题意转化为求线段的交点个数。 先将任一坐标离散化&#xff0c;这里以 x x 为例。之后将 x" role="presentation" style="position: relative;">xx 与 y y 坐标分别排序,求出这些线段。以…

NOI / 2.5基本算法之搜索-1818:红与黑

总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻的黑色瓷砖移动。请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 输…

Android adb shell后面可用的常用命令详细列举

adb shell 后面可以跟的常见命令有如下&#xff1a; am app_process backup bootanimation coloradjust dpm idmap input media requestsync settings svc uiautomator appops appwidget bmgr bu content hid ime interrupter pm screencap sm telecom wm dumpsys logcat getpr…

f4v文件解析

经过几天日夜,对照 flv_video_file_format_spec_v10_1.pdf,用C写了个f4v文件分析工具。也适应mp4文件分析。 原始文件为 sky.f4v 由ffmpeg生成(ffmpeg -i sky.mov sky.f4v) 链接: https://pan.baidu.com/s/1asrSPJZq1Zv4zQaYqgDsRg 密码: frec flv.exe (./flv sky.f4v)…

v-if,v-else-if, v-else的实际使用

需求是医疗水平&#xff0c;价格水平&#xff0c;服务态度分值都为0-10分&#xff0c;1-4分是红色&#xff0c;5-7分是黄色&#xff0c;8-10分是绿色&#xff0c;数据均从后台请求过来的。 一开始想的是通过Vue中ref属性&#xff0c;可以获取到当前元素&#xff0c;在数据请求…

我在公司彻夜加班,老板居然做出这种事.....

讲道理&#xff0c;我的学历远达不到BAT等名企大厂的要求&#xff0c;去不了好公司我认了&#xff0c;大专毕业的我在找工作的时候发现留给自己的机会并不多&#xff0c;最后去了一家不知名的小公司。入职后才发现这家公司其实就是个外包公司&#xff0c;里面的业务部门和制度相…

智慧加油站解决方案,提高加油区和卸油区的安全性和效率

英码科技智慧加油站解决方案是一个综合应用了AI智能算法的视觉分析方案&#xff0c;旨在提高加油区和卸油区的安全性和效率。 加油区算法&#xff1a; 吸烟检测&#xff1a;通过AI算法分析视频流&#xff0c;检测是否有人在加油区域吸烟&#xff0c;以防止火灾风险。 打电话…

Java中Object类常用的11个方法

Java中Object类常用的11个方法 先看下 Object 的类结构&#xff08;快捷键&#xff1a;alt7&#xff09;&#xff1a; 1. getClass 方法&#xff08;获取类的class对象。&#xff09; public final native Class<?> getClass();final 方法、获取对象的运行时 class …