コンテストが随分ご無沙汰だったので参加してきました.
Codeforces Round #61 (Div. 2)
A. Petya and Java
面倒だったので,BigIntegerを使って読み込み.実は,入力は必ず正の数なので,負の方向へのチェックは必要ありませんでした….
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class A{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
void run(){
BigInteger b=sc.nextBigInteger();
long[] s={-128, -32768, -2147483648, -9223372036854775808L};
long[] e={127, 32767, 2147483647, 9223372036854775807L};
String[] ss={"byte", "short", "int", "long"};
for(int i=0; i<4; i++){
if(b.compareTo(new BigInteger(s[i]+""))>=0
&&b.compareTo(new BigInteger(e[i]+""))<=0){
println(ss[i]);
return;
}
}
println("BigInteger");
}
void println(String s){
System.out.println(s);
}
void print(String s){
System.out.print(s);
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
public static void main(String[] args){
new A().run();
}
}
B. Petya and Countryside
全探索すればOK.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class B{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
int n;
int[] a;
void run(){
n=sc.nextInt();
a=new int[n];
for(int i=0; i<n; i++){
a[i]=sc.nextInt();
}
int max=0;
for(int j=0; j<n; j++){
int s=1;
for(int i=j-1; i>=0; i--){
if(a[i]<=a[i+1]){
s++;
}else{
break;
}
}
for(int i=j+1; i<n; i++){
if(a[i-1]>=a[i]){
s++;
}else{
break;
}
}
max=max(max, s);
}
println(max+"");
}
void println(String s){
System.out.println(s);
}
void print(String s){
System.out.print(s);
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
public static void main(String[] args){
new B().run();
}
}
C. Petya and File System
書けば通ると思いましたが,落ちてしまいました.
D. Petya and His Friends
私が考えたのは以下のやり方.
a1 | a2 | a3 | a4 | … | an |
2 | 2 | 2 | 2 | … | |
| 3 | 3 | 3 | … | 3 |
5 | | 5 | 5 | … | 5 |
7 | 7 | | 7 | … | 7 |
これを縦に掛けたものがそれぞれ答え.
実際には,6, 10, 15, 15*2, 15*3, …で十分だったようです.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class D{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
void run(){
int n=sc.nextInt();
if(n==2){
println("-1");
return;
}
BigInteger[] bis=new BigInteger[n];
for(int i=0; i<n; i++){
bis[i]=BigInteger.ONE;
}
int max=1000;
int p=0;
int[] prime=new int[max];
boolean[] isPrime=new boolean[max+1];
Arrays.fill(isPrime, true);
isPrime[0]=isPrime[1]=false;
for(int i=2; i<=max; i++){
if(isPrime[i]){
prime[p++]=i;
for(int j=2*i; j<=max; j+=i){
isPrime[j]=false;
}
}
}
for(int j=0; j<n; j++){
BigInteger bi=new BigInteger(prime[j]+"");
for(int i=0; i<n-1; i++){
bis[(j+i)%n]=bis[(j+i)%n].multiply(bi);
}
}
for(int i=0; i<n; i++){
if(bis[i].toString().length()>100){
println("-1");
return;
}
}
for(int i=0; i<n; i++){
println(bis[i]+"");
}
}
void println(String s){
System.out.println(s);
}
void print(String s){
System.out.print(s);
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
public static void main(String[] args){
new D().run();
}
}
ooxo- 3226p 68位
1506 -> 1694
紫コーダーになりました.