4.8 阿里
代码(没a)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while(t!=0){
int n = sc.nextInt();
int m = sc.nextInt();
int a = sc.nextInt();
int b = sc.nextInt();
int num = 0;
//特训时间不足一个木头人的血量,则消灭0
if(n<a){
System.out.print(0);
continue;
}
else{
//木头人数量小于攻击范围,经过a时间后全部消灭。
if(m<=b){
System.out.print(m);
continue;
}
}
int[] arr = new int[m];
int k =0;
while(m!=0){
arr[k] = a;
m--;
k++;
}
//每次挑最小的b个-1
while(n!=0){
/*Arrays.sort(arr, new Comparator(){
@Override
public boolean comapre(Integer a1, Integer a2){
return a1.compareTo(a2);
}
});*/
Arrays.sort(arr);
int i =0;
while(b!=0){
if(arr[i]!=0 && i<m){
arr[i]-=1;
b--;
i++;
}
if(i<m)
i++;
}
n--;
}
for(int j =0;j<=m;j++){
if(arr[j] == 0)
num++;
}
System.out.print(num);
t--;
}
}
}
//正解:数学题,n秒攻击,每秒b个,如果可攻击的总血量(n*b)>=怪物血量(m*a),则全部消灭;
public class Main1 {
public static void main(String[] args) {
int t;
Scanner scanner=new Scanner(System.in);
t=scanner.nextInt();
for(int i=1;i<=t;i++){
int time=scanner.nextInt();
int num=scanner.nextInt();
int first_blood=scanner.nextInt();
int max_attack=scanner.nextInt();
if(time < first_blood){
System.out.println(0);
continue;
}
if(time == first_blood){
System.out.println(max_attack);
continue;
}
//大于总血量
if(time*max_attack >= num*first_blood){
System.out.println(num);
}
else
System.out.println((int) Math.ceil((double) time*max_attack/(double) first_blood));
}
}
}
第二题
地图问题,在n*n地图上,从左上角出发,每次沿着上下左右任意方向移动距离小于k,移动位置需要价值高于当前位置价值。求路上的最大累计价值。
作者:offer你看看我
链接:https://www.nowcoder.com/discuss/403478?type=all&order=time&pos=&page=1
来源:牛客网
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int t=scanner.nextInt();
for (int i=0;i<t;i++){
int n=scanner.nextInt();
int max_step=scanner.nextInt();
int[][] value=new int[n+1][n+1];
for (int j=1;j<=n;j++){
for (int k=1;k<=n;k++){
value[j][k]=scanner.nextInt();
}
}
int[][] dp=new int[n+1][n+1];
System.out.println(calcMaxWay(1,1,max_step,dp,value));
}
}
private static int calcMaxWay(int x,int y,int max_step,int[][] dp,int[][] value){
if (dp[x][y]>0)
return dp[x][y];
int max_sum=0;
for (int step=1;step<=max_step;step++){
if(y-step>0 && value[x][y-step]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x,y-step,max_step,dp,value));
if(y+step<value[1].length && value[x][y+step]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x,y+step,max_step,dp,value));
if(x-step>0 &&value[x-step][y]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x-step,y,max_step,dp,value));
if(x+step<value[1].length && value[x+step][y] > value[x][y])max_sum=Math.max(max_sum,calcMaxWay(x+step,y,max_step,dp,value));
}
dp[x][y]=value[x][y]+max_sum;
return dp[x][y];
}
}
招银
代码
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
ArrayList<String> strList = new ArrayList<>();
for(int i =0;i<t;i++){
strList.add(sc.next());
}
for(int i = 0;i<t;i++){
if(isJingx(strList.get(i))){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}
public static boolean isJingx(String str){
//String rev = str.reverse();
char[] ch = str.toCharArray();
int length = ch.length;
char[] ch2 = new char[length];
for(int j =0;j<length;j++){
ch2[j] = ch[length-1-j];
}
for(int i=0;i<length;i++){
if(!isHuiwen(ch[i],ch2[i]))
return false;
}
return true;
}
public static boolean isHuiwen(char c1, char c2){
if(c1 == '1' && c2 == '1')
return true;
if((c1 == '2' && c2 == '5')|| (c1 == '5' && c2 == '2'))
return true;
if((c1 == '3' && c2 == '8') || (c1 == '8' && c2 == '3'))
return true;
if((c1 == '4' && c2 == '7') || (c1 == '7' && c2 == '4'))
return true;
if((c1 == '6' && c2 == '9') || (c1 == '9' && c2 == '6'))
return true;
return false;
}
}
代码(没a)
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
ArrayList<String> str = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<>();
for(int i=0;i<t;i++){
str.add(sc.next());
arr.add(sc.nextInt());
}
for(int i=0;i<t;i++){
int res = numMax(str.get(i), arr.get(i));
System.out.println(res);
}
}
//str添加加减号后得到k,满足要求的方案数
public static int numMax(String str, int k){
int num = 0;
int length = str.length();
char[] ch = new char[length];
return insertScheme(ch,0,length-1,k);
}
public static int insertScheme(char[] ch, int start, int end, int k){
int num = 0;
if(start == end && k==0)
return 1;
num += insertScheme(ch,start+1,end,k-ch[start]) + insertScheme(ch,start+1,end,ch[start]-k);
return num;
}
}