結果

問題 No.3323 岩井星式ジャンケン
コンテスト
ユーザー 鳩でもわかるC#
提出日時 2025-11-02 17:54:11
言語 C#
(.NET 8.0.404)
結果
AC  
実行時間 103 ms / 2,000 ms
コード長 4,466 bytes
コンパイル時間 9,248 ms
コンパイル使用メモリ 170,900 KB
実行使用メモリ 52,480 KB
最終ジャッジ日時 2025-11-02 17:54:25
合計ジャッジ時間 13,971 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 26
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (107 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

using System.Diagnostics;
using System.Text;
class Program
{
    static string ReadLine() => Console.ReadLine().Trim();
    static int ReadInt() => int.Parse(ReadLine());
    static long ReadLong() => long.Parse(ReadLine());
    static int[] ReadIntArray() { string str = ReadLine(); return str != "" ? str.Split().Select(_ => int.Parse(_)).ToArray() : new int[0]; }
    static long[] ReadLongArray() { string str = ReadLine(); return str != "" ? str.Split().Select(_ => long.Parse(_)).ToArray() : new long[0]; }

    static (int a, int b) ReadInt2() { int[] vs = ReadIntArray(); return (a: vs[0], b: vs[1]); }
    static (int a, int b, int c) ReadInt3() { int[] vs = ReadIntArray(); return (a: vs[0], b: vs[1], c: vs[2]); }
    static (int a, int b, int c, int d) ReadInt4() { int[] vs = ReadIntArray(); return (a: vs[0], b: vs[1], c: vs[2], d: vs[3]); }
    static (long a, long b) ReadLong2() { long[] vs = ReadLongArray(); return (a: vs[0], b: vs[1]); }
    static (long a, long b, long c) ReadLong3() { long[] vs = ReadLongArray(); return (a: vs[0], b: vs[1], c: vs[2]); }
    static (long a, long b, long c, long d) ReadLong4() { long[] vs = ReadLongArray(); return (a: vs[0], b: vs[1], c: vs[2], d: vs[3]); }

    class Player
    {
        public Player(string s)
        {
            char[] vs = s.ToArray();
            Hands = new int[vs.Length];
            for (int i = 0; i < vs.Length; i++)
            {
                if (vs[i] == 'G')
                    Hands[i] = 0;
                if (vs[i] == 'C')
                    Hands[i] = 1;
                if (vs[i] == 'P')
                    Hands[i] = 2;
            }
        }
        public int[] Hands;
        public bool IsDead = false;
    }

    static void Main()
    {
        SourceExpander.Expander.Expand();

        (int N, int M) = ReadInt2();
        List<Player> players = new List<Player>();
        for (int i = 0; i < N; i++)
            players.Add(new Player(ReadLine()));

        List<int> ans = new List<int>();
        for (int i = 0; i < M; i++)
        {
            int[] hands = new int[3];
            for (int k = 0; k < N; k++)
            {
                if (!players[k].IsDead)
                    hands[players[k].Hands[i]]++;
            }
            int h = F(hands);
            ans.Add(h);

            if (h == -1)
            {
                Console.WriteLine(-1);
                return;
            }
            for (int k = 0; k < N; k++)
            {
                if (!players[k].IsDead)
                {
                    if (h == 0 && players[k].Hands[i] == 1)
                        players[k].IsDead = true;
                    if (h == 1 && players[k].Hands[i] == 2)
                        players[k].IsDead = true;
                    if (h == 2 && players[k].Hands[i] == 0)
                        players[k].IsDead = true;
                }
            }
        }
        if(players.All(_ => _.IsDead))
            Console.WriteLine(G(ans));
        else
            Console.WriteLine(-1);

        string G(List<int> ans)
        {
            StringBuilder sb = new StringBuilder();
            foreach (int v in ans)
            {
                if (v == 0)
                    sb.Append('G');
                if (v == 1)
                    sb.Append('C');
                if (v == 2)
                    sb.Append('P');
            }
            return sb.ToString();
        }

        int F(int[] hands)
        {
            if (hands[0] == 0 && hands[1] == 0 && hands[2] == 0)
                return 0;
            if (hands[0] > 0 && hands[1] > 0 && hands[2] > 0)
                return -1;
            if (hands[1] > 0 && hands[2] > 0)
                return 1;
            if (hands[0] > 0 && hands[2] > 0)
                return 2;
            if (hands[0] > 0 && hands[1] > 0)
                return 0;
            if (hands[0] > 0)
                return 2;
            if (hands[1] > 0)
                return 0;
            if (hands[2] > 0)
                return 1;

            return -1;
        }
    }
}

#region Expanded by https://github.com/kzrnm/SourceExpander
namespace SourceExpander{public class Expander{[Conditional("EXP")]public static void Expand(string inputFilePath=null,string outputFilePath=null,bool ignoreAnyError=true){}public static string ExpandString(string inputFilePath=null,bool ignoreAnyError=true){return "";}}}
#endregion Expanded by https://github.com/kzrnm/SourceExpander

0