0
0

More than 3 years have passed since last update.

その後のAtCoder(ABC-214終了時点でレート:214)

Posted at

こんばんは。

ABCに参加するたびに記事を書いていたら大変&記事が大量生産されるので、サマリーして投稿をしていきたいと思います。

直近の戦績

レートの変動はこんな感じでした。

ABC-212:205→201
ABC-213:201→194
ABC-214:194→214

200前後をうろうろする日々となっていますが、214ではようやくC問題を解くことができ、ひさびさのプラスです。

ABC-212

B問題

4桁の暗証番号X1 X2 X3 X4がある。パスワードとして強度は十分か?
以下のいずれかを満たすと弱い。

・4つとも同じ数字
・1~3の任意の数字iについて、X(i+1)がX(i)の次の数字である。

2点目の「任意」について、どれか一つでもそういう組み合わせがあるとだめかと理解して組んだところWAになりました。テストケースを見て理解を改め書き直し。

import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String x = sc.next();
char flg1 = '0';
char flg = '0';
int wk1 = 0;
int wk2 = 0;
  if(x.charAt(0)==x.charAt(1)&&x.charAt(1)==x.charAt(2)&&x.charAt(2)==x.charAt(3)){
    flg1 = '1';
  }

  for(int i=0;i<3;i++){
    wk1 = Integer.parseInt(String.valueOf(x.charAt(i))); 
    wk2 = Integer.parseInt(String.valueOf(x.charAt(i+1))); 
    if((wk1+1)==(wk2)){
  //System.out.println("a" + " " + (Integer.parseInt(x.charAt(i))+1);  
  //System.out.println("a");  
      flg = '1';
    }else{
      if(wk1==9&&wk2==0){
  //System.out.println("b");  
        flg = '1';
      }else{
        flg = '0';
        break;
      }
    }
  }

  if(flg1=='1'||flg=='1'){
  System.out.println("Weak");  
  }else{
  System.out.println("Strong");  
  }

}
}


ABC-213

A問題

A,Bを入力
A xor C = B が成り立つCを求める。
へ?どうやって?分からん・・
とりあえずAとBを2進数に変換して、排他的論理和が成り立つ2進数Cを求め、それを10進数変換。
正解には辿り着いたものの、めっちゃ時間かかる。
解説を読むと簡単に求める方法はあるようですが、ちょっと読んでも理解できず・・やばいな。


import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
  int awk = a;
  int bwk = b;
  int ah[] = new int[8];
  int bh[] = new int[8];
  int ch[] = new int[8];
  int i = 7;
  while(awk>0){
    if(awk%2==0){
      ah[i] = 0;
      //System.out.println(awk);
    }else{
      ah[i] = 1;
    }
    awk = awk/2;
    i--;
  }

  for(int j=i;j>=0;j--){
      ah[j] = 0;
  }

  //for(int k=0;k<8;k++){
      //System.out.println(ah[k]);
  //}

  //System.out.println("**b*********");
  //  b  
  i=7;
  while(bwk>0){
    if(bwk%2==0){
      bh[i] = 0;
      //System.out.println(bwk);
    }else{
      bh[i] = 1;
    }
    bwk = bwk/2;
    i--;
  }

  for(int j=i;j>=0;j--){
      bh[j] = 0;
  }

  //for(int k=0;k<8;k++){
      //System.out.println(bh[k]);
  //}

  for(int k=0;k<8;k++){
      if(bh[k]==1){
        if(ah[k]==0){
          ch[k]=1;
        }else{
          ch[k]=0;
        }
      }else{
        if(ah[k]==0){
          ch[k]=0;
        }else{
          ch[k]=1;
        }
      }
  }

  //System.out.println("******c*****");
  int crui = 0;
  int keisu = 1;
  for(int k=7;k>=0;k--){
      //System.out.println("ch[k] " + ch[k]);
      crui = crui +  ch[k]*keisu;
      //System.out.println(crui);
      keisu = keisu*2;
  }
  System.out.println(crui);

}
}


ABC-214

C問題

複雑なため、問題はサイトをご覧いただくのが良いと思います。
処理を2回回さないといけない点がなかなかやらしい。
サンプルケースではこの点も分からないし・・。
残り6秒で解けました。

import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long s[] = new long[n];
long t[] = new long[n];
long time = 0;
for(int i=0;i<n;i++){
  s[i] = sc.nextLong();
}  
long h[] = new long[n];

for(int i=0;i<n;i++){
  t[i] = sc.nextLong();
    if(i==0){
    h[i] = t[i];
    //System.out.println(t[i]);
    time = s[i]+t[i];
  }else{
    if(t[i]>=time){
      h[i] = time;
      //System.out.println(time);
    }else{
      h[i] = t[i];
      //System.out.println(t[i]);
    }
    if(t[i]>=time){
    time = time + s[i];
    }else{
    time = t[i] + s[i];
    }
  }
}

long time2=time;

for(int i=0;i<n;i++){
  if(i==0){
    if(time2<=h[i]){
    System.out.println(time2);
    time2 = s[i]+time2;
    }else{
    System.out.println(h[i]);
    time2 = s[i]+h[i];
    }
  }else{
   ///////////    
    if(h[i]>=time2){
      System.out.println(time2);
    }else{
      System.out.println(h[i]);
    }
   ///////////    
    if(h[i]>=time2){
    time2 = time2 + s[i];
    }else{
    time2 = h[i] + s[i];
    }
  //System.out.println(h[i]);
  }
  //System.out.println(" time " + time + " t[i] " + t[i]);
}  

   //System.out.println(cnt);

}
}


最後に

C問題が久々に解けただけで、また頑張ろうと思い直しています。楽観的。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0