4.1美团笔试,大佬指点一下,真的很郁闷
不知道哪里错了,错了也不知道该怎么调,没啥进步,大佬可以指点一下吗?
感激不尽
第一题
45%
输入n个数和m次操作
把+改成别的符号
class Solution {
public double getRes(int[] a,long[] an, int index,String tmp) {
int len=an.length;
double sum=0;
sum=an[len-1]-an[index+1]+an[index-1];
if(tmp.equals("+")){
sum=sum+a[index]+a[index+1];
}else if(tmp.equals("-")){
sum=sum+a[index]-a[index+1];
}else if(tmp.equals("*")){
sum=sum+a[index]*a[index+1];
}else if(tmp.equals("/")){
sum=sum+(double)a[index]/a[index+1];
}
return sum;
}
}
public class Main {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int n, m;
n=cin.nextInt();
int[] a=new int[n+1];
long[] an=new long[n+1];
long sum=0;
for(int i=1;i<=n;i++){
a[i]=cin.nextInt();
sum+=a[i];
an[i]=sum;
}
m=cin.nextInt();
int index;
String tmp;
for(int j=0;j<m;j++){
index=cin.nextInt();
tmp=cin.next();
Solution solution = new Solution();
System.out.printf("%.1f",solution.getRes(a,an,index,tmp));
}
}
}
第二题
100%
排序然后减一下
第三题
18%
收藏夹,0是改,1是查
就模拟了一下啊,维护了一个前缀和
class Solution {
public long select(long[] an, int x,int y) {
return an[y]-an[x-1];
}
public void update(long[] a,long[] an,int x,int y){
a[x]=y;
for(int i=x;i<an.length;i++){
an[i]+=y;
}
}
}
public class Test02 {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int n,m;
n=cin.nextInt();
m=cin.nextInt();
long[] p=new long[m+1];
int[] x=new int[m+1];
int[] y=new int[m+1];
long[] a=new long[n+1];
long[] an=new long[n+1];
for(int i=1;i<=m;i++){
p[i]=cin.nextInt();
}
for(int i=1;i<=m;i++){
x[i]=cin.nextInt();
}
for(int i=1;i<=m;i++){
y[i]=cin.nextInt();
}
//p表示操作
//x表示第一个操作数,y第二个
//a原数组,an前缀和
Solution solution = new Solution();
for(int i=1;i<=m;i++){
if(p[i]==0){
solution.update(a,an,x[i],y[i]);
}else {
System.out.println(solution.select(an,x[i],y[i]));
}
}
}
}
第四题
18%
魔法水,指定倒满某个杯子
dp
public class Test02 {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int n;
n=cin.nextInt();
long[] a=new long[n+1];
int[] z=new int[n+1];
int[] z0=new int[n+1];
long[] asum=new long[n+1];
for(int i=1;i<=n;i++){
a[i]=cin.nextInt();
}
for(int i=1;i<=n;i++){
a[i]=a[i]-cin.nextInt();
}
for(int i=1;i<=n;i++){
z[i]=cin.nextInt();
}
//a每个杯子还差多少可以倒满
//z每个杯子1ml需要的魔法值
//asum倒满这个杯子需要的最小魔法值
//z0 是通过哪个魔法值倒满的
z0[1]=z[1];
asum[1]=z0[1]*a[1];
//dp枚举的过程
for(int i=2;i<=n;i++){
long sum1=asum[i-1]+z0[i-1]*a[i];
long sum2=z[i]*a[i];
if(sum1<sum2){
asum[i]=sum1;
z0[i]=z0[i-1];
}else{
asum[i]=sum2;
z0[i]=z[i];
}
}
//输出
int m=cin.nextInt();
int[] q=new int[m+1];
for(int i=1;i<=m;i++){
q[i]=cin.nextInt();
}
for(int i=1;i<=m;i++){
System.out.println(asum[q[i]]);
}
}
}
#美团4.1笔试##美团##笔试#
腾讯成长空间 6074人发布