2018ACM-ICPC焦作站E题Resistors in Parallel

Resistors in Parallel

题目:

ACM-ICPC Jiaozuo Onsite 2018

题解:因为题目数据范围很大,所以猜测应该是一个区间一个固定的最小值。问题转换成了如何求某个最小值影响的区间。坤神一眼看出,应该通过素数求,因为一个数的因子有很多,但是所有的因子都可以通过该数的素因子推出来。比如6的因子有1 2 3 6,素因子有2 3,所以1=2^0*3^0,2=2^1*3^0,3=2^0*3^1,6=2^1*3^1。又因为并联电阻并联越多阻值越小,所以在某些数有相同的素因子的情况下,这些素因子组成的因子越多越好,但是题目说能被d*d (d>=2)整除的因子的电阻为无穷大,并联相当于没有,所以对总电阻的贡献值为0,可以不考虑。所以以30为例,30的素因子有2 3 5,所以我们只需要计算x=1+2+3+5+2*3+2*5+3*5+2*3*5,即可,然后只以2 3 5为素因子的区间最小值就是30/gcd(30,x) / (x/(gcd(30,x))).最后对于每次输入的N,以素数从小到大累乘的方式找到n以内数最大组成的素因子。例如n=100 2*3*5<=100,2*3*5*7>100,所以100就在只以2 3 5为素因子的区间里。

因为这个题的数据范围很大,所以用Java写。

 1 import java.util.*;
 2 import java.math.*;
 3 public class Main{
 4     static Scanner cin = new Scanner(System.in);
 5     static BigInteger [] dp = new BigInteger[1100];
 6     static boolean [] prime = new boolean[11000];
 7     static int[] nums = new int [11000];
 8     static int cnt = 0;
 9     public static void init() {
10         prime[1] = true;
11         for(int i = 1 ;i<=1000;i++) {
12             prime[i]=true;
13         }
14         for(int i = 2; i <= 1000; i++) {
15             if(prime[i]) {
16                 nums[++cnt] = i;
17                 for(int j = i+i; j <= 1000; j +=i) {
18                     prime[j] = false;
19                 }
20             }
21         }
22     }
23     public static void main(String[] args) {
24         init();
25         int casen = cin.nextInt();
26         while(casen-->0) {
27             BigInteger n = cin.nextBigInteger();
28             int k;
29             dp[0] = BigInteger.ONE;
30             BigInteger yinzi = BigInteger.ONE;
31             for(k = 1; (yinzi.multiply(BigInteger.valueOf(nums[k])).compareTo(n)<=0);k++) {
32                 yinzi = yinzi.multiply(BigInteger.valueOf(nums[k]));
33             }
34             k--;
35             BigInteger sum = BigInteger.ONE;
36             for(int i = 1;i <= k; i++) {
37                 dp[i]=dp[i-1].add(dp[i-1].multiply(BigInteger.valueOf(nums[i])));
38             }
39             BigInteger gcd = yinzi.gcd(dp[k]);
40             System.out.println(yinzi.divide(gcd)+"/"+dp[k].divide(gcd));
41         }
42     }
43
44 }

原文地址:https://www.cnblogs.com/1013star/p/10094741.html

时间: 2024-08-30 18:36:10

2018ACM-ICPC焦作站E题Resistors in Parallel的相关文章

2016 ICPC青岛站---k题 Finding Hotels(K-D树)

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5992 Problem Description There are N hotels all over the world. Each hotel has a location and a price. M guests want to find a hotel with an acceptable price and a minimum distance from their locations.

2016 ICPC大连站---F题 Detachment

题意:输入一个x,将x拆分成一些小的数(这些数不能相同,即x=a1+a2+......   ai!=aj when i!=j),然后这些数相乘得到一个成积(s=a1*a2*......),求最大的乘积s: 思路:考虑最简单的做法便是贪心,很明显将一个数分的越小,这个乘积越大,那么对于给的x 先找2+3+4+....+n<=x 找到最大的n  如果和小于x ,那么将n右移一个数(n->n+1)  如果和还小于x继续将n-1右移......知道和x相等时,输出s   这样做时间复杂度很高,那么得优

2015 ICPC 沈阳站M题

M - Meeting Time Limit:6000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5521 Appoint description:  System Crawler  (2016-04-18) Description Bessie and her friend Elsie decide to have a meeting. However, af

2018焦作区域赛E. Resistors in Parallel

原题链接:http://codeforces.com/gym/102028/problem/E 解法: 打表找规律 可知分子1 2 6 30 210...... 发现后一个等于前一个乘以2,3,5,7...... 还可以发现分母1 3 12 72 576.... 发现后一个等于前一个乘以3,4,6,8......(也就是分子对应的质数加1) 那么接下来就是大数问题了 Java代码如下:(真的简短粗暴啊!) 1 //package 实验; 2 import java.math.BigInteger

2016年acm icpc 青岛站(中国石油大学(华东))总结

2016年acm icpc 青岛站(中国石油大学(华东))总结 2016年11月11日,在这个传说中所谓的单身节,我们出发了,做了整整一天的车来到了青岛.不得不提一下,作为一个身处华中沿海地区的童鞋,这是我人生第一次坐了这么久的高铁(真的无聊,无聊,无聊),然后到了青岛是晚上了(挤公交车真的是一件很刺激的事情). 海风那个吹, 海水那个涌, 冻得萌新瑟瑟发抖. 也许是知道我们要来挖石油的缘故吧, 老天爷特意给了我们三天晴天. 晚上也没啥事,就这么洗洗睡了,不对还有传说中学长带领学弟剁手呢! 第二

2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)

题目链接:传送门 题意: n个格子排成一行,我们有m种颜色,可以给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描述之后立马想到了一个公式 :C(m,k)*k*(k-1)^(n-1),但是仔细分析了一下 这个公式的含义是相邻的格子颜色不同,使用的颜色总数小于等于k的方案数,但是这个 公式可以帮忙我们衍生出来下面的公式,C(k,x)*x*(x-1)^(n-1),这个公式的含义是在这 k种颜色中再选出来x种使得相邻的格子不同色最后的颜色数小于等于x,然

HDU6228&amp;&amp;icpc沈阳站思维签到题

http://acm.hdu.edu.cn/showproblem.php?pid=6228 题意:给一颗无根树 给定k种颜色 问用这k种颜色染成的节点形成子树的公共边最大; 题解:刚开始想的通过两遍dfs找最长链的起始和终止位置 然后以起始为根跑dfs统计每个点子树节点个数 然后通过压缩成一个链 从左和从右分别找到两边大于等于k的位置 但是wa了  至今不知道WA在哪 然后想了一下别的思路  一个边能被当作公共边 就必须这个边的两个节点能贡献的子树个数>=k并且(n-子树个数)>=k 然后统

2016年 icpc 北大站赛后总结

这是第一次参加 icpc 大赛,参加前心中就十分忐忑,虽然赛前写过往届的题目,对比榜单也挺受打击的,但对奖牌还是十分憧憬.赛前浏览比赛须知,发现编译器与平常使用的有些出入,参赛前在机房对指定系统及编译器有一周的练习使用,基本操作有了一定收悉.到了赛场热身赛调试期间,发现编译器与机房练习使用的有一些出入,单单打头文件,实验编译成功花费了将近半个小时,心情有些发慌,热身赛是4道搜索题,经过编译调试始终没有做出来,心态有些爆炸.热身赛后,与其他两位队友商讨了一下明天比赛的措施,调整心态.

icpc南宁站赛后总结

11月24号,我们经过26个小时的火车来到了广西南宁,一场漫长的过程. 24号晚到达南宁,做地铁到达学校,找到住的地方,南宁的天真是让人无奈. 25号,上午去广西大学体育馆报道,然后回去好好整理了一下,中午去学校吃了个饭,三点开始开幕式,在体育馆坐着等开幕式开始,这的天气让我感觉到了南方的温度真的好冷啊,三点开幕式开始,半个小时候热身赛开始了,第一题一道简单的循环查找,由于我跟队友传达题意的时候没有统一而错了两次,最后改了下A了,然后第二题的题意出来了,是道数学题,想了几种方法优化,但是时间都会