2017.07.14【NOIP提高组】模拟赛B组小结

来源:互联网 发布:北京知果科技有限公司 编辑:程序博客网 时间:2024/06/06 20:53

T1jzoj1349. 最大公约数

Description

  小菜的妹妹小诗就要读小学了!正所谓计算机要从娃娃抓起,小菜决定在幼儿园最后一段轻松的时间里教妹妹编程。
  小菜刚教完gcd即最大公约数以后,一知半解的妹妹写了如下一段代码:
   sum:=0;
   for i:=1 to n-1 do
   for j:=i+1 to n do sum:=sum+gcd(i,j)

  显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。

Input

  第一行一个整数t,即表示有t组数据
  接下来t行,每行一个整数n

Output

  t行,每行一个整数,表示n所对应的sum值

Sample Input

2
10
100

Sample Output

67
13015

Data Constraint

Hint

【数据规模】
  20%数据t≤100,n≤100
  40%数据t≤1000,n≤2000
  100%数据t≤10000,n≤1000000
 想法:
 把它转化成sigma(i=2~n)sigma(j=1~i-1)gcd(i,j)
 设a[i]表示sigma(j=1~i-1)gcd(i,j)
 那么我们只需要对a数组进行前缀和可以得到答案
 对于gcd(x,y)=i,x>y,必有gcd(x/i,y/i)=1
 所以x内满足gcd(x,y)=i必有phi[x/i]个
 a[i]=sigma(i mod j=0)j*phi(i/j)
 nlog^2n

T2jzoj3511. 【NOIP2013模拟11.5A组】cza的蛋糕

    Description

cza特别喜欢吃海苔,怎么吃也吃不够。cza的生日到来时,他的父母给他买了许许多多的海苔和一个生日蛋糕。海苔是一个1*2或2*1的长方形,而蛋糕则是一个n*m的矩阵。蛋糕上有一些蜡烛占据了位置,其他地方都可以放海苔。cza的父母让cza把海苔尽可能多的放在蛋糕上,但是海苔不能够重叠放置。cza想把海苔留着自己以后慢慢吃,可又不敢违背父母,于是他决定放一少部分在蛋糕上。为了不使父母起疑,cza必须确保放置完海苔后,蛋糕上不存在1*2或2*1的空白以放置更多的海苔。cza想知道这样得花多少海苔,请帮助他求出满足这样放置所需的最少海苔数。

Input

输入的第一行是蛋糕的规模n和m(注意是n行m列)

接下来的n行每一行含m个字符。每个字符要么是”.”,表示空白;要么是”*”,表示蜡烛。

Output

输出文件只包含一个整数k,表示满足题目要求的最小海苔数。

Sample Input

3 3

.*.

Sample Output

3

Data Constraint

对于30%的数据N<=5,M<=5

对于100%的数据N<=70, M<=7
想法:
这题调了我很久~
设f[i,j,k]为到第i行,第i行状态为j,第i+1行状态为k的最小需要海苔数
f[0,2^(m-1)-1,a[i]]=0
a[i]表示第i行的蜡烛的状态
枚举i,枚举一个j表示第i-1行状态,k表示第i行的状态
判断j的二进制是否有多个0在一起
递归求解t(当前列数),x(i行状态),y(i+1行状态),s(放的海苔数)
如果t>m,f[i,x,y]:=min(f[i,j,k]+s)
如果[i,t]已经放了,或[i-1,t]和[i,t-1]放了,或t=1且[i-1,t]放了dg(t+1,x,y,s)
如果[i+1,t]没放,递归
如果[i,t+1]没放且t

T3jzoj3519. 【NOIP2013模拟11.6A组】灵能矩阵

Description

Protoss 的灵能矩阵由若干个节点所构成。它们构成了一棵有根树,树根为1 号节点。定义没有子节点的节点为叶节点。叶节点内储存着一定量的能量,而非叶节点的能量为它子树中所有叶节点的能量之和。

如果一个节点的每一个子节点的能量都相同,那么这个节点就是能量平衡的。如果矩阵内每一个节点都能量平衡,则这个矩阵是能量平衡的。

被你所接管的这个灵能矩阵,似乎在长期的废弃之后已经无法保持的能量的平衡。为了重新让矩阵平衡,你可以通过将叶节点储存的能量散逸到太空中。你不可以使一个叶节点储存的能量为负数。

你希望求出最少散逸多少能量到太空中就能使灵能矩阵的能量平衡。

Input

第一行包含一个整数n,表示节点的数量。

接下来一行,包含A1,A2…An 这n 个非负整数,表示每个节点自身储存的能量。保证储存能量的节点都是叶节点。

接下来n -1 行,每行包含两个数字Si, Ti,描述一条从Si 号节点到Ti 号节点的边。

Output

第一行包含一个整数,表示最少要散逸多少单位的能量才能使灵能矩阵的能量平衡。

Sample Input

6

0 0 12 13 5 6

1 2

1 3

1 4

2 5

2 6

Sample Output

6

Data Constraint

对于15% 的数据,1<= n <= 10。

对于30% 的数据,对于边Si, Ti,Si + 1 ̸= Ti 的边数不超过3 条。

对于50% 的数据,1<= n <= 1000。

对于100% 的数据,1 <= n <= 100000,1 <= Ai <= 2^30。
想法:
设g[i]表示为g[son[i]儿子节点]的LCM值(最小公倍数)*cnt
设a[i]为i为根的字数储存的能量
设cnt为儿子数
min为min(a[son[i]])
m=min-min mod (g[x]-cnt)
m表示x的每个儿子节点修改成什么能量
tree[x]表示以x为根的子树所有节点能量平衡的花费
tree[x]+=tree[son[i]]
sum表示x的儿子节点原来的a[i]的和
tree[x]+=sum-m*cnt
a[x]=m*cnt

阅读全文
1 0