参加了第二场和第三场,第二场做了第一题,却没通过,第二题没看懂。
然后又参加了第三场,第一题是个算面积的,没啥思路,就去做第二题去了。
第二题是算对称求和值的。可惜做完没提交,代码放在这,望大神指点。
输入
5 2
1 1 0 1 0
2 4
1 2
输出
4
4
5意思是有五张图片,2意思是总共有几次查询。
1 1 0 1 0是每张图片的值
2 4是第一次查询,从第二张图片到第四张
1 2是第二次查询,从第一张图片到第二张
4 是第一次查询,图片依次为1 0 1.用户所能看到的可能有1、0、1、1 0、0 1、1 0 1。其中1、0、1、1 0 1是对称的,所以把他们的值加起来,就是1+0+1+(1+0+1)=4
4是第二次查询,图片为1 1,所有可能是1、1、1 1。都是对称的,相加得1+1+(1+1)=4
代码如下
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int nums=sc.nextInt();//题目中的5
int times=sc.nextInt();//题目中的2
int values[]=new int[nums];//建立数组并赋值
for(int i=0;i<nums;i++){
values[i]=sc.nextInt();
}
int l,r,result;
for(int i=0;i<times;i++){
l=sc.nextInt();
r=sc.nextInt();
int[] newvalues=new int[r-l+1];//通过l、r选出范围,新建数组并赋值
for(int j=0;j<r-l+1;j++){
newvalues[j]=values[j+l-1];
}
result=calculate(newvalues,r-l+1);调用方法,计算结果
System.out.println(result);
}
}
private static int calculate(int[] newvalues, int nums) {
// TODO Auto-generated method stub
int result=0;
for(int i=0;i<nums;i++){
for(int k=i;k<nums;k++){
int[] newnewvalues=new int[k-i+1];
for(int j=0;j<k-i+1;j++){
newnewvalues[j]=newvalues[i+j];
}
result+=isbtf(newnewvalues,k-i+1);//调用是否对称方法
}
}
return result;
}
private static int isbtf(int[] newnewvalues, int length) {//是否对称的方法
// TODO Auto-generated method stub
boolean isbtf=true;
int result=0;
for(int i=0;i<length/2+1;i++){
if(newnewvalues[i]!=newnewvalues[length-i-1])
isbtf=false;
}
if(isbtf==true){
for(int j=0;j<length;j++){
result+=newnewvalues[j];
}
return result;
}
else
return 0;
}
}