[伯俊]数列の点数-236
リンク
リンクテキスト
質問する
n個の整数からなる数列があります.この数列から1つの整数を削除したり、2つの整数を削除したりできます.整数を1つ削除すると、その整数はスコアになります.2つの整数を削除すると、2つの整数の積はスコアになります.この手順を繰り返します.数列に残りがない場合は、点数の合計の最大値を求めるプログラムを作成します.
例えば、−1,5,3,5,1等の数列.まず1を取り除き、それから5と5を取り除き、それから-1と-3を取り除きます.この場合、点数はそれぞれ1、25、3で、合計は29となります.
入力
第1行は整数n(1≦n≦100000)を与える.次のn行では、n個の節値が1000000を超えない整数が与えられる.
しゅつりょく
最初の行に最大スコアを出力します.
に答える
n個の整数の絶対値は1000000に達する可能性があるため、非常に大きな整数になる可能性が高い.だからlong doubleじゃない
BigIntegerタイプを使用する必要があります.次に、値の整数、負数、および1の配列を生成します.整数または負数の配列の長さが偶数であれば2個を乗じ、配列の長さが奇数であれば2個を乗じ、残りの1個は加算するだけです.
Code import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
BigInteger answer=new BigInteger("0");
ArrayList<Long> plus=new ArrayList<Long>();
ArrayList<Long> minus=new ArrayList<Long>();
ArrayList<Long> one=new ArrayList<Long>();
for(int i=0; i<n; i++)
{
long num=Integer.parseInt(br.readLine());
if(num==1)
one.add(num);
else if(num>1)
plus.add(num);
else if(num<=0)
minus.add(num);
}
Collections.sort(plus, Collections.reverseOrder());
Collections.sort(minus);
if(plus.size()%2==0)
{
for(int i=0; i<plus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
}
else if(plus.size()%2!=0)
{
for(int i=0; i<plus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
answer=answer.add(BigInteger.valueOf(plus.get(plus.size()-1)));
}
if(minus.size()%2==0)
for(int i=0; i<minus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
else if(minus.size()%2!=0)
{
for(int i=0; i<minus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
answer=answer.add(BigInteger.valueOf(minus.get(minus.size()-1)));
}
long one_size=one.size();
answer=answer.add(BigInteger.valueOf(one_size));
System.out.println(answer);
}
}
Reference
この問題について([伯俊]数列の点数-236), 我々は、より多くの情報をここで見つけました
https://velog.io/@ehdcks3421/백준-수열의-점수-2036
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
n個の整数からなる数列があります.この数列から1つの整数を削除したり、2つの整数を削除したりできます.整数を1つ削除すると、その整数はスコアになります.2つの整数を削除すると、2つの整数の積はスコアになります.この手順を繰り返します.数列に残りがない場合は、点数の合計の最大値を求めるプログラムを作成します.
例えば、−1,5,3,5,1等の数列.まず1を取り除き、それから5と5を取り除き、それから-1と-3を取り除きます.この場合、点数はそれぞれ1、25、3で、合計は29となります.
入力
第1行は整数n(1≦n≦100000)を与える.次のn行では、n個の節値が1000000を超えない整数が与えられる.
しゅつりょく
最初の行に最大スコアを出力します.
に答える
n個の整数の絶対値は1000000に達する可能性があるため、非常に大きな整数になる可能性が高い.だからlong doubleじゃない
BigIntegerタイプを使用する必要があります.次に、値の整数、負数、および1の配列を生成します.整数または負数の配列の長さが偶数であれば2個を乗じ、配列の長さが奇数であれば2個を乗じ、残りの1個は加算するだけです.
Code import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
BigInteger answer=new BigInteger("0");
ArrayList<Long> plus=new ArrayList<Long>();
ArrayList<Long> minus=new ArrayList<Long>();
ArrayList<Long> one=new ArrayList<Long>();
for(int i=0; i<n; i++)
{
long num=Integer.parseInt(br.readLine());
if(num==1)
one.add(num);
else if(num>1)
plus.add(num);
else if(num<=0)
minus.add(num);
}
Collections.sort(plus, Collections.reverseOrder());
Collections.sort(minus);
if(plus.size()%2==0)
{
for(int i=0; i<plus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
}
else if(plus.size()%2!=0)
{
for(int i=0; i<plus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
answer=answer.add(BigInteger.valueOf(plus.get(plus.size()-1)));
}
if(minus.size()%2==0)
for(int i=0; i<minus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
else if(minus.size()%2!=0)
{
for(int i=0; i<minus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
answer=answer.add(BigInteger.valueOf(minus.get(minus.size()-1)));
}
long one_size=one.size();
answer=answer.add(BigInteger.valueOf(one_size));
System.out.println(answer);
}
}
Reference
この問題について([伯俊]数列の点数-236), 我々は、より多くの情報をここで見つけました
https://velog.io/@ehdcks3421/백준-수열의-점수-2036
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
最初の行に最大スコアを出力します.
に答える
n個の整数の絶対値は1000000に達する可能性があるため、非常に大きな整数になる可能性が高い.だからlong doubleじゃない
BigIntegerタイプを使用する必要があります.次に、値の整数、負数、および1の配列を生成します.整数または負数の配列の長さが偶数であれば2個を乗じ、配列の長さが奇数であれば2個を乗じ、残りの1個は加算するだけです.
Code import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
BigInteger answer=new BigInteger("0");
ArrayList<Long> plus=new ArrayList<Long>();
ArrayList<Long> minus=new ArrayList<Long>();
ArrayList<Long> one=new ArrayList<Long>();
for(int i=0; i<n; i++)
{
long num=Integer.parseInt(br.readLine());
if(num==1)
one.add(num);
else if(num>1)
plus.add(num);
else if(num<=0)
minus.add(num);
}
Collections.sort(plus, Collections.reverseOrder());
Collections.sort(minus);
if(plus.size()%2==0)
{
for(int i=0; i<plus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
}
else if(plus.size()%2!=0)
{
for(int i=0; i<plus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
answer=answer.add(BigInteger.valueOf(plus.get(plus.size()-1)));
}
if(minus.size()%2==0)
for(int i=0; i<minus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
else if(minus.size()%2!=0)
{
for(int i=0; i<minus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
answer=answer.add(BigInteger.valueOf(minus.get(minus.size()-1)));
}
long one_size=one.size();
answer=answer.add(BigInteger.valueOf(one_size));
System.out.println(answer);
}
}
Reference
この問題について([伯俊]数列の点数-236), 我々は、より多くの情報をここで見つけました
https://velog.io/@ehdcks3421/백준-수열의-점수-2036
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class practice {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
BigInteger answer=new BigInteger("0");
ArrayList<Long> plus=new ArrayList<Long>();
ArrayList<Long> minus=new ArrayList<Long>();
ArrayList<Long> one=new ArrayList<Long>();
for(int i=0; i<n; i++)
{
long num=Integer.parseInt(br.readLine());
if(num==1)
one.add(num);
else if(num>1)
plus.add(num);
else if(num<=0)
minus.add(num);
}
Collections.sort(plus, Collections.reverseOrder());
Collections.sort(minus);
if(plus.size()%2==0)
{
for(int i=0; i<plus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
}
else if(plus.size()%2!=0)
{
for(int i=0; i<plus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(plus.get(i)*plus.get(i+1)));
answer=answer.add(BigInteger.valueOf(plus.get(plus.size()-1)));
}
if(minus.size()%2==0)
for(int i=0; i<minus.size(); i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
else if(minus.size()%2!=0)
{
for(int i=0; i<minus.size()-1; i+=2)
answer=answer.add(BigInteger.valueOf(minus.get(i)*minus.get(i+1)));
answer=answer.add(BigInteger.valueOf(minus.get(minus.size()-1)));
}
long one_size=one.size();
answer=answer.add(BigInteger.valueOf(one_size));
System.out.println(answer);
}
}
Reference
この問題について([伯俊]数列の点数-236), 我々は、より多くの情報をここで見つけました https://velog.io/@ehdcks3421/백준-수열의-점수-2036テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol