private void TypeComboBOX2_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (TypeComboBOX2.SelectedValue.ToString() == "1" /*etudiant*/)
     {
         CIN.Show();
         Identifiantlabel.Text = "N° d'inscription";
         Filier.Show();
     }
     else
     if (TypeComboBOX2.SelectedValue.ToString() == "3" /*prof*/)
     {
         CIN.Hide();
         Identifiantlabel.Text = "CIN";
         Filier.Show();
     }
     else     /*Extern*/
     {
         CIN.Hide();
         Identifiantlabel.Text = "CIN";
         Filier.Hide();
     }
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            int[] NM = CIN.IntArray();
            int   N  = NM[0];
            int   M  = NM[1];

            int[][] A = new int[N][];
            for (int i = 0; i < N; i++)
            {
                A[i] = CIN.IntArray();
            }

            // B[i][j] = k; (i,j)にある、k行目にあるべき数字
            int[][] B = new int[N][];
            for (int i = 0; i < N; i++)
            {
                B[i] = new int[M];
                for (int j = 0; j < M; j++)
                {
                    B[i][j] = (A[i][j] - 1 - (A[i][j] - 1) % M) / M;
                }
            }

            // C[i][j] = k; 1回目の操作のあと(i,j)にいるk行目にあたる文字
            int[][] C = new int[N][];
            // count[i][j] = i行目に入るべき数字がj行目にある個数
            int[][] count = new int[N][];
            for (int i = 0; i < N; i++)
            {
                C[i]     = new int[M];
                count[i] = new int[N];

                for (int j = 0; j < M; j++)
                {
                    C[i][j] = -1;
                }
            }

            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    count[B[i][j]][i] = count[B[i][j]][i] + 1;
                }
            }

            // 列に対して、列に入れたい数字ごとに埋めていく
            for (int j = 0; j < M; j++)
            {
                var used = new HashSet <int>();
                //C[i][j]を決める
                for (int i = 0; i < N; i++)
                {
                    int max      = 0;
                    int maxIndex = -1;
                    // k行目に入れたい数字を選ぶ
                    for (int k = 0; k < N; k++)
                    {
                        if (used.Contains(k))
                        {
                            continue;
                        }
                        if (count[k][i] > max) //より残っている文字を優先する
                        {
                            max      = count[k][i];
                            maxIndex = k;
                        }
                    }
                    C[i][j] = maxIndex;
                    used.Add(maxIndex);
                    count[maxIndex][i]--;
                }
            }

            Console.WriteLine("Hello World!");
        }