sum

JAVA CCF-201812-2 小明放学

混江龙づ霸主 提交于 2020-02-12 04:38:15
欢迎访问我的 CCF认证解题目录 题目描述 思路过程 题目给的灯都是小明出发时的状况,所以对于每个灯我们还得自己计算到达时的状态。 新建一个sum变量来累计时间,由于极端情况下int会数据溢出,所以得采用Long类型。 新建一个变量x,存储红绿灯一轮所需的时间。 开始读入数据,如果是路,则直接 sum += time; 这一步配合下面的图进行观看容易理解一些。如果不是路,我们计算出这一轮剩余的时间(脑子里有一个循环的红绿灯时间轴,以绿灯为起点,红灯为终点,无限循环),然后加上sum再对x取余,即可得到这一轮已经经过的时间,最后进行判断,如果此时不是绿灯,则加上所需的时间即可。 红绿灯的时间轴 x <-------------------------0 | 红灯 | 黄灯 | 绿灯 | 如果没看懂欢迎评论,看到后会马上回复。 代码 import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { Scanner in = new Scanner ( System . in ) ; int r = in . nextInt ( ) , y = in . nextInt ( ) , g = in . nextInt ( ) , n = in . nextInt

HDU1003 Max Sum(最大子串和)& HDU1024 Max Sum Plus Plus

假如想象 提交于 2020-02-12 04:22:53
# Max Sum Description : 一个数字序列,求 m a x ( ∑ k = i j k 2 , 1 < = i < = j < = n ) {{max(\sum_{k=i}^j k^2,1<=i<=j<=n)}} m a x ( ∑ k = i j ​ k 2 , 1 < = i < = j < = n ) 状态 : dp[i] ,前i个数,以第i个数结尾的子串的和的最大值,之所以必须要求以第i个数结尾,是因为子串要求数字必须连续上去。 DP方程 : d p [ i ] = m a x ( d p [ i − 1 ] + a [ i ] , a [ i ] ) dp[i]=max(dp[i-1]+a[i],a[i]) d p [ i ] = m a x ( d p [ i − 1 ] + a [ i ] , a [ i ] ) # include <stdio.h> # include <iostream> # include <cmath> # include <math.h> # include <string> # include <string.h> # include <algorithm> # define ms0(a) memset(a,0,sizeof(a)) # define ll long long # define INF

PAT乙级1002JAVA代码

江枫思渺然 提交于 2020-02-11 23:59:37
pat1002 题目网址 :https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384: 题目描述 : 写出这个数 : 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式 : 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 输入样例: 1234567890987654321123456789 输出样例: yi san wu 解题思路: 1.因为题目给出数值在10的100次方,因此用string来储存 2.给定一个数num,定义其初始值为0 计算num=输入字符串的每一个字符相加的值 4.定义sum返回num的原始值,并给output赋值拼音 计算num=sum的字符逐字相加 5.如果i不等于0,输入“ ”(空格),在输入num对应的拼音(实现每一个数字见得空格,并实现最后一个没有空格) 程序: import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { /

链剖&LCT总结

醉酒当歌 提交于 2020-02-11 03:41:18
在搞LCT之前,我们不妨再看看喜闻乐见的树链剖分。 树链剖分有一道喜闻乐见的例题: NOI2015 软件包管理器 如果你看懂题目了,你就会明白它是叫你维护一个树,这棵树是不会动的,要兹磁子树求和,子树修改,树上路径求和,树上路径修改。 树链剖分就是把一个树剖分成像这样的东西: 一棵树用一坨重链组成,重链之间用轻链连接。 对于树上的每一个点,它和子树大小最大的那个的根节点在同一重链,其他儿子另成一条新重链。 这样可以证明每个点到根至多只有log级这么多段的连续的重链。 然后我们把连续的一坨重链用线段树维护一下。 代码(常数非常大 #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; #define SIZ 266666 namespace segt { #define LC(x) ((x)<<1) #define RC(x) (LC(x)+1) int M=131072,ls[SIZ],rs[SIZ],tag[SIZ],sum[SIZ]; inline bool avb(int x) { return 1<=x&&x<=2*M; } void pd(int x) { if(!avb(x)||tag[x]==-1) return; if(avb(LC(x))) tag[LC(x)]

P1036 选数(DFS)

北城余情 提交于 2020-02-10 20:12:52
P1036 选数 题目描述 已知 n个整数 x1,x2,…,xn,以及11个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和为素数:3+7+19=29。 输入格式 键盘输入,格式为: n,k1≤ n ≤20, k < n ) x 1, x 2,…,*x**n*(1≤xi≤5000000) 输出格式 屏幕输出,格式为: 1个整数(满足条件的种数)。 输入输出样例 输入 4 3 3 7 12 19 输出 1 题解 因为n<=20,所以可以放心地DFS。因为要遍历每个数的选与不选,所以共有O(2^n^)的复杂度2^20^(1m)约为1e6,能过。 又因为sum最多是20*5e6=1e8,可以不用ll(我比较谨慎,所以开了ll) 真正要判断是否为质数的情况就是C(n,k),最差的时候n为20,k为10,方案数约有1.847e5种。 Judge函数为O(根号sum),sum最大为1e8,这时复杂度为1e4,如果执行1.847e5次就是1.847e9的复杂度。 综上所述,判断质数的总复杂度才是程序的主要复杂度。 这样写,虽然有些危险

c# Linq及Lamda表达式应用经验之 GroupBy 分组

自作多情 提交于 2020-02-10 08:05:39
//******* 对集合按Name属于进行分组GroupBy查询 ******** //结果中包括的字段: //1、分组的关键字:Name = g.Key //2、每个分组的数量:count = g.Count() //3、每个分组的年龄总和:ageC = g.Sum(item => item.Age) //4、每个分组的收入总和:moneyC = g.Sum(item => item.Money) //写法1:lamda 表达式写法(推荐) var ls = persons1.GroupBy(a => a.Name).Select(g => (new { name = g.Key, count = g.Count(), ageC = g.Sum(item => item.Age), moneyC = g.Sum(item => item.Money) })); //写法2:类SQL语言写法 最终编译器会把它转化为lamda表达式 var ls2 = from ps in persons1 group ps by ps.Name into g select new { name = g.Key, count = g.Count(), ageC = g.Sum(item => item.Age), moneyC = g.Sum(item => item.Money) }; List

[SDOI 2015]约数个数和

跟風遠走 提交于 2020-02-09 00:07:13
Description 设d(x)为x的约数个数,给定N、M,求 $\sum^N_{i=1}\sum^M_{j=1}d(ij)$ Input 输入文件包含多组测试数据。 第一行,一个整数T,表示测试数据的组数。 接下来的T行,每行两个整数N、M。 Output T行,每行一个整数,表示你所求的答案。 Sample Input 2 7 4 5 6 Sample Output 110 121 HINT 1<=N, M<=50000 1<=T<=50000 题解 先给出一个结论: $$ \sigma_0(ij) = \sum_{a | i} \sum_{b | j} [gcd(a, b) = 1]$$ 证明(摘自 Ken_He ): 我们令 $i = p_1^{a_1} p_2^{a_2} \cdots$ , $j = p_1^{b_1} p_2^{b_2} \cdots$ , $d | ij$ 且 $d = p_1^{c_1} p_2^{c_2} \cdots$ , 则 $c_n \le a_n + b_n$ 。 考虑如何不重复地统计每一个 $d$ : 令 $c_n = A_n + B_n$ , 其中 $A_n$ 和 $B_n$ 分别为 $i$ 和 $j$ 对 $c_n$ 的贡献, 则我们要求 \begin{cases}B_n = 0 & A_n < a_n \\B_n \ge 0 &

猜数字

∥☆過路亽.° 提交于 2020-02-09 00:00:18
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。 输入格式: 输入在第一行给出一个正整数N( ≤)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数( ≤ 100)。 输出格式: 在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。 输入样例: 7 Bob 35 Amy 28 James 98 Alice 11 Jack 45 Smith 33 Chris 62 输出样例: 22 Amy 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<iomanip> 5 #include<cstring> 6 #include<string> 7 #include<cmath> 8 #include<stack> 9 #include<queue> 10 #include<vector> 11 #include<set> 12 #include<map> 13 #define ll long long 14 #define mes(x,y) memset(x,y,sizeof(x)) 15 using namespace std; 16 struct

《构建之法》读后感-2

ぃ、小莉子 提交于 2020-02-08 23:33:25
1. 第4章 两人合作 —— 4.3 代码设计规范 —— 4.3.3 错误处理 此处提到了“断言”的概念,但着墨不多,介绍简略。   那么问题来了,挖掘机……不是,断言是什么?   编写代码时,如果程序员相信在程序中的某个特定点某表达式值(布尔式)为真,可将其标为断言(assert)。   举个栗子:   public class AssertionDemo{   public static void main(String[]args){   int i; int sum=0;    for(i=0;i<10;i++){ sum+=i; }    assert i==10;   assert sum>10&&sum<5*10:"sum is "+sum;   }   }   上述程序中语句assert i==10断言i的值为10,如果i的值不为10将抛出AssertionError异常。语句assert sum>10&&sum<5*10:"sum is "+sum断言sum<5*10,如果为false,将抛出带有消息"sum is "+sum的AssertionError异常。   如果肯定某件事一定要发生,则可以使用断言;如果这件事有别的可能,则应用if……else处理。   由于可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样

(updating)[学习笔记]概率与期望进阶

谁说胖子不能爱 提交于 2020-02-08 22:19:02
组合数学,概率与期望,数论 大概是我学的最差的几个板块吧… Part 1 高斯消元 1.1 概述 最常见的当然是随机游走问题了… • f u = ∑ p u , v ∗ ( f v + w u , v ) f_u=\sum p_{u,v}* (f_{v}+w_{u,v}) f u ​ = ∑ p u , v ​ ∗ ( f v ​ + w u , v ​ ) • 计算期望在这个节点上,停留多少步: f u = ∑ p v , u ∗ f v + [ u = S ] f_u=\sum p_{v,u}* f_v + [u=S] f u ​ = ∑ p v , u ​ ∗ f v ​ + [ u = S ] HNOI 2013 游走 SDOI 2012 走迷宫 1.2 Band Matrix 带宽:对于 ∀ ( i , j ) ∈ G , a i , j = 1 存 在 一 个 x , ( x , x ) ∈ G 且 ∣ i − x ∣ + ∣ j − x ∣ ≤ d \forall (i,j)\in G,a_{i,j}=1 存在一个x,(x,x)\in G且|i-x|+|j-x|\leq d ∀ ( i , j ) ∈ G , a i , j ​ = 1 存 在 一 个 x , ( x , x ) ∈ G 且 ∣ i − x ∣ + ∣ j − x ∣ ≤ d ,当 d d d