Codeforces Round #213

今日は朝はリフレクと弐寺を1クレずつ。

弐寺はAir Bellをフルコン。
Codeforces Round #213_f0019846_138389.jpg

リフレクはJOMANDAをAAA
Codeforces Round #213_f0019846_1391651.jpg


午後から県内某所で議事録担当をしていました。
その後は、艦これ談義に花を咲かせてました、ええ・・・。
後はトマッシュを大量に置かれるというテロも。

帰宅後はCodeforcesに向けてアップ。

A問題は勘違いしやすい。
N個の数値があり、K以下のすべての数で構成されている数値がいくつあるか求めよという問題。
Kが5なら5,4,3,2,1,0すべての数を使わなければいけない。


import java.util.Scanner;

public class Main2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int count = 0;
for(int i = 0 ; i < n ; i++){
String st = sc.next();
boolean[] klist = new boolean[k+1];
for(int j = 0 ; j < st.length(); j++){
if(Character.digit(st.charAt(j),10) <= k)klist[Character.digit(st.charAt(j), 10)] = true;
}
boolean ok = true;
for(int j = 0 ; j < klist.length ; j++){
if(!klist[j]){
ok = false;
break;
}
}
if(ok){
count++;
}
}
System.out.println(count);
}
}


B問題は、A[i]+A[i+1] = A[i+2]となっているような最長セグメントを求める問題。

import java.util.Scanner;

public class Main2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i = 0 ; i < n ; i++){
a[i] = sc.nextInt();
}

if(n <= 2){
System.out.println(n);
}else{
int count = 2;
int tmpc = 2;
for(int i = 0 ; i < n-2 ; i++){
if(a[i]+a[i+1] == a[i+2]){
tmpc++;
}else{
count = Math.max(count, tmpc);
tmpc = 2;
}
}
System.out.println(Math.max(count, tmpc));
}
}
}



C問題はがんばったけどだめでした。
行列i,j要素を構成する数値が与えられていて、
i*jを値とする。
つまりiが3、jが4であり、数値が2873982734059であれば、
7*3 = 21となる。
この行列を作り、長方形で囲った和がちょうどAになるような場合の数を求める問題。
オーダを落とせず。


import java.util.Scanner;

public class Main2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String s = sc.next();
long count = 0;
boolean[] overdead = new boolean[s.length()];
for(int i = 1 ; i <= s.length(); i++){
int ct = 0;
for(int j = 0 ; j < i ; j++){
ct += Character.digit(s.charAt(j), 10);
}
if(ct == 0){
if(a == 0){
count += s.length()*(s.length()+1)/2;
}
}else if(a % ct == 0){
for(int k = 1 ; k <= s.length(); k++){
int kt = 0;
for(int l = 0 ; l < k; l++){
kt += Character.digit(s.charAt(l), 10);
}
if(kt*ct == a){
count++;
}
for(int l = 1 ; l <= s.length()-k ; l++){
kt -= Character.digit(s.charAt(l-1),10);
kt += Character.digit(s.charAt(l+k-1), 10);
if(kt*ct == a){
count++;
}else if(kt*ct > a){
overdead[0] = true;
}
}
}
}
for(int j = 1 ; j <= s.length()-i ; j++){
ct -= Character.digit(s.charAt(j-1), 10);
ct += Character.digit(s.charAt(j+i-1),10);
if(overdead[j])continue;
if(ct > a)overdead[j] = true;
if(ct == 0){
if(a == 0){
count += s.length()*(s.length()+1)/2;
}
}else if(a % ct == 0){
for(int k = 1 ; k <= s.length(); k++){
int kt = 0;
for(int l = 0 ; l < k; l++){
kt += Character.digit(s.charAt(l), 10);
}
if(kt*ct == a){
count++;
}
for(int l = 1 ; l <= s.length()-k ; l++){
kt -= Character.digit(s.charAt(l-1),10);
kt += Character.digit(s.charAt(l+k-1), 10);
if(kt*ct == a){
count++;
}
}
}
}
}
}
System.out.println(count);
}
}


結果WAだらけでレート落ちました。残念。

  by ddrer-yossi | 2013-11-19 23:33 | codeforces

<< TopCoder SRM597... メタルパッドを衝動買い >>

SEM SKIN - DESIGN by SEM EXE