🤔
Atcoderをやってみる
前置き
本記事は、みすてむずアドカレ その2
の24日目の記事です。
みすてむずアドカレ2024の一覧
- みすてむずアドカレ
- みすてむずアドカレ その2 ← コレの24日目
- みすてむずアドカレ レシピ
なにすんの?
Atcoderします。それだけです。
今回の解答に使用する言語
- Java
- C++ 20(gcc 12.2)
- Python3(CPython 3.11.4)
追加予定
- (Rust)
問題一覧
AGC003-A "Wanna go back home"
- 問題の条件を洗い出す
とりあえず、問題文を見てみて、こんな感じの条件があるな〜と感じました。- 好きな分だけ移動させることができる
- 4方向しか移動する必要がない
よくよくみてみると...
正の距離だけ移動します。
と書いてあるので、どうやら移動距離を0にするのはダメなようです...
- 実装方針を考える
ってことは、北に1の距離で50回移動しても、南に50の距離で1回移動すれば無かったことにできるので...
北と南, 東と西のそれぞれのペアについて、どちらも文字列に登場している、していないが判定できればいけるはず - 実装
Java
import java.util.Scanner;
public class AGC003A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
boolean flagN = false,
flagW = false,
flagS = false,
flagE = false;
for (char c : s.toCharArray()) {
switch (c) {
case 'N':
flagN = true;
break;
case 'W':
flagW = true;
break;
case 'S':
flagS = true;
break;
case 'E':
flagE = true;
break;
}
}
if(flagN == flagS && flagW == flagE) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
C++
#include<iostream>
#include<string>
int main() {
std::string s;
bool flags[4] = {};
std::cin >> s;
for(char c: s) {
if(c=='N') flags[0] = true;
if(c=='S') flags[1] = true;
if(c=='W') flags[2] = true;
if(c=='E') flags[3] = true;
}
std::cout << (((flags[0]==flags[1])&&(flags[2]==flags[3]))?"Yes":"No") << std::endl;
return 0;
}
ABC042-B "文字列大好きいろはちゃんイージー"
- 問題の条件を洗い出す
文字列が辞書順ソートされて結合されなければいけない
... だけだなこれ() - 実装方針を考える
- 文字列の個数を受け取って
- その分だけ入力
- 辞書順ソートして
- 結合して出力
- 実装
Java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ABC042B {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int l = sc.nextInt();
List<String> _list = new ArrayList<>();
for(int i = 0; i < n; i++) _list.add(sc.nextLine());
_list.sort(String::compareTo);
System.out.println(String.join("", _list));
}
}
Python(一行)
print("".join(list(sorted([input() for _ in range(int(input().split()[0]))]))))
ABC088-B "Card Game for Two"
- 問題の条件を洗い出す
順番が考慮されていない、スペース区切りの数字が入ってくる
... だけですね - 実装方針を考える
- 個数を受け取る
- その分だけ入力
- 降順ソートして
- 先頭から偶数番目をアリスに、奇数番目をボブに追加
- 差を出力
- 実装
Java
import java.util.*;
public class ABC088B {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> a = new ArrayList<>();
for (int i = 0; i < n; i++) {
a.add(sc.nextInt());
}
a.sort(Integer::compareTo);
Collections.reverse(a);
int alice = 0,
bob = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
alice += a.get(i);
} else {
bob += a.get(i);
}
}
System.out.println(alice - bob);
}
}
Discussion