链接:https://ac.nowcoder.com/acm/contest/9246/A
来源:牛客网
牛牛在各个平台被各种传奇游戏的广告轰炸,所以他决定去玩一玩这类的游戏。这类游戏挂机就可以升级,所以牛牛每天都能变强。在第i天里,牛牛能杀死防御力小于等于i的怪物。但由于牛牛还要刷题,所以牛牛每天最多杀一只怪物。这个游戏共有n只怪物,每只怪物的防御力为DEF[i],牛牛想知道最少要到第几天才能把这n只怪物都杀死。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param n int整型
* @param DEF int整型一维数组
* @return int整型
*/
public int Minimumdays (int n, int[] DEF) {
// write code here
Arrays.sort(DEF);
int ans=DEF[0];
for(int i=1;i<DEF.length;++i){
ans=Math.max(ans+1,DEF[i]);
}
return ans;
}
}
链接:https://ac.nowcoder.com/acm/contest/9246/B
来源:牛客网
现在有3个数组a,b,c
a[1]=2,a[2]=6,对所有的n>=3,a[n] = 2*a[n-1] + 3*a[n-2]。
b[1]=7,b[2]=35,对所有的n>=3,b[n] = 3*b[n-1] + 10*b[n-2]。
对所有的n>=1,有c[n] = a[n]*b[n]。
现在给你一个正整数n,返回c[n]%1000000007的值。
根据an的递推方程 f(n)=2f(n−1)+3f(n−2),我们可以写出这样的特征方程:
x^2=2x+3
解方程得x1=3,x2=-1
设通解为 f(n) = c1x1^n + c2x2^n
代入初始条件f(1)=2,f(2)=6
即可得出an的通项公式f(n)=2*3^(n-1)
bn同理
最后用个快速幂即可得出答案。
import java.util.*;
public class Solution {
/**
* 返回c[n]%1000000007;的值
* @param n long长整型 即题目中的n
* @return int整型
*/
int mod=1000000007;
public int Answerforcn (long n) {
// write code here
long a=(2*pow(3,n-1))%mod;
long b=(7*pow(5,n-1))%mod;
return (int)((a*b)%mod);
}
private long pow(int x,long y){
long base=x,ans=1;
while(y!=0){
if((y&1)==1){
ans=(ans*base)%mod;
}
y>>=1;
base=(base*base)%mod;
}
return ans;
}
}
import java.util.*;
public class Solution {
/**
*
* @param k int整型 表示完全k叉树的叉数k
* @param a int整型一维数组 表示这棵完全k叉树的Dfs遍历序列的结点编号
* @return long长整型
*/
long ans=0;
int k,n,cnt=0;
int[] num;
private void dfs(long x,int y){
for(int i=1;i<=k;++i){
if(x*k+i<n){
cnt++;
ans+=num[cnt]^num[y];
dfs(x*k+i,cnt);
}else
break;
}
}
public long tree6 (int k, int[] a) {
// write code here
this.k=k;
num=a;
n=a.length;
dfs(0,0);
return ans;
}
}