こんにちは。
ちょっと気持ちに余裕があったので作ってみました。
C++
1#include <iostream>
2
3int main()
4{
5 std::size_t L, N;
6 std::cin >> L >> N;
7
8 constexpr static std::size_t Ln=3;
9 constexpr static std::size_t Nn=3;
10 int Ls[L][Ln];
11 for (std::size_t i=0; i < L; ++i)
12 for (std::size_t j=0; j < Ln; ++j)
13 Ls[i][j]=-1;
14
15 for (std::size_t i=0; i < N; ++i)
16 {
17 std::size_t desired[Nn];
18 for (auto& d : desired)
19 std::cin >> d;
20
21 [&]()
22 {
23 for (std::size_t j=0; j < Nn; ++j)
24 {
25 for (std::size_t k=0; k < Ln; ++k)
26 {
27 if (Ls[desired[j]][k] < 0)
28 {
29 Ls[desired[j]][k]=i;
30 return;
31 }
32 }
33 }
34 }();
35 }
36
37 for (std::size_t i=0; i < L; ++i)
38 {
39 for (std::size_t j=0; j < Ln; ++j)
40 {
41 if (Ls[i][j] < 0)
42 break;
43 std::cout << Ls[i][j] << " ";
44 }
45 std::cout << "\n";
46 }
47}
wandbox
このまま提出したら、確実にツッコミが入りますのできちんと内容を理解することを強くお勧めします。
これはC++11のgccでないと通りませんが、これをC++03のgccでも通るように修正できれば「自力」で解いたと言ってもよいかと。
なお、 [&](){ ... }();
の部分はラムダ式を定義して実行しています。ここを普通の関数に直すか、きちんと説明できるかしないときっと「落ちる」と思います。
あと、これは Ls の定義でVLAを使っているのでVisual Studioでは通らない筈です。gccなら一応通ります。