Skip to content

Commit 985b6f5

Browse files
authored
Merge pull request #74 from tossy310/tossy-fix
Tossy fix
2 parents 9b0ab81 + d4e9727 commit 985b6f5

File tree

5 files changed

+92
-83
lines changed

5 files changed

+92
-83
lines changed

contest.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ problems:
2121
- dir_name: pairprogramming
2222
data_sets:
2323
- label: Small
24-
score: 15
24+
score: 20
2525
- label: Large
26-
score: 150
26+
score: 200
2727
- dir_name: battle_royal
2828
data_sets:
2929
- label: Small
@@ -43,18 +43,18 @@ problems:
4343
- label: Medium
4444
score: 400
4545
- label: Large
46-
score: 400
46+
score: 300
4747
- dir_name: tsunahiki
4848
data_sets:
4949
- label: Small
5050
score: 50
5151
- label: Large
52-
score: 600
52+
score: 500
5353
- dir_name: two-squares
5454
data_sets:
5555
- label: Small
5656
score: 50
5757
- label: Medium
58-
score: 400
58+
score: 500
5959
- label: Large
60-
score: 400
60+
score: 300

even2primes/statement.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,6 @@ $E$
4949
```
5050

5151
# Hint
52-
素数判定の回数をなるべく少なくすることを考えよう。うまくできれば、Largeあっても5秒以内に答えが出るプログラムを書けるはず。
52+
素数判定の回数をなるべく少なくすることを考えよう。うまくできれば、Largeあっても5秒以内に答えが出るプログラムを書けるはず。
53+
54+
LargeはMediumの400点 + Largeの300点の、計700点相当の難易度の問題です。Mediumまで解けて,Largeが解けない場合、他の問題も考えてみましょう。

tsunahiki/statement.md

+59-59
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,59 @@
1-
# Description
2-
20XX年、情報理工学部のオリエンでは2つの軍に分かれての綱引き対決が恒例行事となり、今年は計$2N$人の新入生がカトー軍とヤマダ軍に$N$人ずつ分かれて対決する事になりました。
3-
4-
綱引きは1vs1の対戦を計$N$回行います。$i$回目の対戦では各軍の$i$人目の生徒同士が戦い、強い方の生徒が勝利します。ただし、強さが同じ場合はヤマダ軍の生徒が勝利します。
5-
各生徒の綱引きの強さはカトー軍が数列$A$, ヤマダ軍が数列$B$にそれぞれ数値化されています。カトー軍の$i$人目の生徒の強さは$A_i$, ヤマダ軍の$i$人目の生徒の強さは$B_i$です。
6-
7-
今年のカトー軍の大将であるあなたは、自軍の生徒の登場順を並び替える事で自軍の勝利数を最大化したいと考えています。
8-
勝利数を最大化するために、自軍の弱い生徒を捨て駒として強い生徒にぶつける戦略や、自分の強い生徒を相手の弱い生徒と戦わせて確実に勝数を稼ぐ戦略等、様々な戦略が考えられます。
9-
10-
ヤマダ軍は弱い生徒から順に綱引き対決に登場してきます。適切にカトー軍の生徒を並び替え、カトー軍の勝利回数の最大値を求めてください。
11-
12-
# Constraints
13-
各軍の生徒の強さを表す数列$A$, $B$は昇順にソートされて与えられている。
14-
15-
$1 \leq N, A_i , B_i \leq 100$
16-
17-
# Input
18-
1つの入力ファイルは複数のテストケースからなる。
19-
20-
入力ファイルの最初の1行目にはテストケースの個数 $T$ が記される $(1 \leq T \leq 100)$。
21-
22-
2行目以降には、$T$ 個のテストケースが記述されており、各テストケースは次の形式で表される。
23-
24-
```
25-
$N$
26-
$A_1$ $A_2$ ... $A_N$
27-
$B_1$ $B_2$ ... $B_N$
28-
```
29-
30-
# Output
31-
各テストケースに対して、カトー軍が勝利できる試合数の最大値を1行ずつ出力せよ。
32-
33-
34-
# Sample Input
35-
```
36-
3
37-
3
38-
1 2 3
39-
1 1 1
40-
2
41-
1 1
42-
2 2
43-
5
44-
2 3 4 5 6
45-
1 2 3 5 7
46-
```
47-
48-
# Sample Output
49-
```
50-
2
51-
0
52-
4
53-
```
54-
最初のケースは順番に生徒を戦わせることで2回カトー軍が勝つことができます。
55-
56-
2番目のケースではカトー軍のどの生徒もヤマダ軍のどの生徒より弱いため、カトー軍は一度も勝つことができません。
57-
58-
3番目のケースでは、カトー軍の4人目の生徒と5人目の生徒を入れ替える事で、4回カトー軍が勝つことができます。
59-
1+
# Description
2+
20XX年、情報理工学部のオリエンでは2つの軍に分かれての綱引き対決が恒例行事となり、今年は計$2N$人の新入生がカトー軍とヤマダ軍に$N$人ずつ分かれて対決する事になりました。
3+
4+
綱引きは1vs1の対戦を計$N$回行います。$i$回目の対戦では各軍の$i$人目の生徒同士が戦い、強い方の生徒が勝利します。ただし、強さが同じ場合はヤマダ軍の生徒が勝利します。
5+
各生徒の綱引きの強さはカトー軍が数列$A$, ヤマダ軍が数列$B$にそれぞれ数値化されています。カトー軍の$i$人目の生徒の強さは$A_i$, ヤマダ軍の$i$人目の生徒の強さは$B_i$です。
6+
7+
今年のカトー軍の大将であるあなたは、自軍の生徒の登場順を並び替える事で自軍の勝利数を最大化したいと考えています。
8+
勝利数を最大化するために、自軍の弱い生徒を捨て駒として強い生徒にぶつける戦略や、自分の強い生徒を相手の弱い生徒と戦わせて確実に勝数を稼ぐ戦略等、様々な戦略が考えられます。
9+
10+
ヤマダ軍は弱い生徒から順に綱引き対決に登場してきます。適切にカトー軍の生徒を並び替え、カトー軍の勝利回数の最大値を求めてください。
11+
12+
# Constraints
13+
各軍の生徒の強さを表す数列$A$, $B$は昇順にソートされて与えられている。
14+
15+
$1 \leq N, A_i , B_i \leq 100$
16+
17+
# Input
18+
1つの入力ファイルは複数のテストケースからなる。
19+
20+
入力ファイルの最初の1行目にはテストケースの個数 $T$ が記される $(1 \leq T \leq 100)$。
21+
22+
2行目以降には、$T$ 個のテストケースが記述されており、各テストケースは次の形式で表される。
23+
24+
```
25+
$N$
26+
$A_1$ $A_2$ ... $A_N$
27+
$B_1$ $B_2$ ... $B_N$
28+
```
29+
30+
# Output
31+
各テストケースに対して、カトー軍が勝利できる試合数の最大値を1行ずつ出力せよ。
32+
33+
34+
# Sample Input
35+
```
36+
3
37+
3
38+
1 2 3
39+
1 1 1
40+
2
41+
1 1
42+
2 2
43+
5
44+
2 3 4 5 6
45+
1 2 3 5 7
46+
```
47+
48+
# Sample Output
49+
```
50+
2
51+
0
52+
4
53+
```
54+
最初のケースは順番に生徒を戦わせることで2回カトー軍が勝つことができます。
55+
56+
2番目のケースではカトー軍のどの生徒もヤマダ軍のどの生徒より弱いため、カトー軍は一度も勝つことができません。
57+
58+
3番目のケースでは、カトー軍の4人目の生徒と5人目の生徒を入れ替える事で、4回カトー軍が勝つことができます。
59+

two-squares/tests/generator.cpp

+23-16
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ vector<vector<P>> handmade_med = {
1515
{{-3000,-3000}, {3000,-3000}, {-3000,3000}, {3000,3000}, {-3000,-3000}, {2999,-3000}, {-3000,2999}, {2999,2999}},
1616
{{-3000,3000}, {0,3000}, {-3000,0}, {0,0}, {0,0}, {0,3000}, {3000,0}, {3000,3000}},
1717
{{-3000,-3000}, {-3000,-2999}, {-2999,-3000}, {-2999,-2999}, {-3000,3000}, {-3000,2999}, {-2999,3000}, {-2999,2999}},
18-
{{-3000,-3000}, {-3000, -3000}, {3000,-3000}, {3000, -3000}, {-3000,3000}, {-3000,3000}, {3000,3000}, {3000,3000}}
18+
{{-3000,-3000}, {-3000, -3000}, {3000,-3000}, {3000, -3000}, {-3000,3000}, {-3000,3000}, {3000,3000}, {3000,3000}},
19+
{{0,0}, {1,0}, {0,1}, {1,1}, {2,0}, {3,0}, {2,1}, {3,1}}
1920
};
2021

2122
vector<vector<P>> handmade_large = {
@@ -25,13 +26,19 @@ vector<vector<P>> handmade_large = {
2526
};
2627

2728

28-
void shuffle_and_output(ostream &os, vector<P> v) {
29+
void shuffle_and_output(ostream &os, vector<vector<P>> &vec) {
30+
shuffle(begin(vec), end(vec));
31+
for(auto &v : vec) {
32+
for(int i=0; i<8; i++) os << v[i].first << " " << v[i].second << (i==7 ? "\n" : " ");
33+
}
34+
}
35+
36+
void shuffle_vector(vector<P> &v) {
2937
assert(v.size() == 8);
3038
shuffle(begin(v), end(v));
31-
for(int i=0; i<8; i++) os << v[i].first << " " << v[i].second << (i==7 ? "\n" : " ");
3239
}
3340

34-
bool validate_and_answer(ostream &os, const vector<P> &v) {
41+
bool validate(const vector<P> &v) {
3542
if(v.size() != 8) return false;
3643

3744
for(int i=0; i<8; i++){
@@ -69,18 +76,12 @@ bool validate_and_answer(ostream &os, const vector<P> &v) {
6976
if(l1>0 && l2>0) ans[{min(l1,l2), max(l1,l2)}]++;
7077
}
7178

72-
if(ans.size() == 1){
73-
os << ans.begin()->first.first << " " << ans.begin()->first.second << endl;
74-
return true;
75-
} else {
76-
return false;
77-
}
79+
return ans.size() == 1;
7880
}
7981

8082

81-
void generate(const string &file_name, int num_case, int max_abs, const vector<vector<P>> &hand_cases, bool is_parallel = false) {
83+
void generate(const string &file_name, int num_case, int max_abs, vector<vector<P>> hand_cases, bool is_parallel = false) {
8284
ofstream in_ofs(file_name + ".in");
83-
ofstream diff_ofs(file_name + ".diff");
8485
in_ofs << num_case << endl;
8586

8687
auto gen_square = [max_abs, is_parallel](){
@@ -101,20 +102,26 @@ void generate(const string &file_name, int num_case, int max_abs, const vector<v
101102
return vector<P>({p1, p2, p3, p4});
102103
};
103104

105+
vector<vector<P>> cases;
106+
104107
for (int i=0; i + hand_cases.size()<num_case; i++) {
105108
vector<P> v;
106109
do {
107110
v = gen_square();
108111
auto tmp = gen_square();
109112
v.insert(v.end(), tmp.begin(), tmp.end());
110-
} while(!validate_and_answer(diff_ofs, v));
111-
shuffle_and_output(in_ofs, v);
113+
} while(!validate(v));
114+
shuffle_vector(v);
115+
cases.push_back(v);
112116
}
113117

114118
for (auto &v : hand_cases) {
115-
assert(validate_and_answer(diff_ofs, v));
116-
shuffle_and_output(in_ofs, v);
119+
assert(validate(v));
120+
shuffle_vector(v);
121+
cases.push_back(v);
117122
}
123+
124+
shuffle_and_output(in_ofs, cases);
118125
}
119126

120127

zoo/statement.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ P子さんは動物園に来ました。園内を回って、順番に $M$ 匹
2525
# Input
2626
1つの入力ファイルは複数のテストケースからなる。
2727

28-
入力ファイルの最初の1行目にはテストケースの個数 $T$ が記される $(1 \leq T \leq 50)$
28+
入力ファイルの最初の1行目にはテストケースの個数 $T$ が記される。
2929

3030
2行目以降には、$T$ 個のテストケースが記述されており、各テストケースは次の形式で表される。
3131

0 commit comments

Comments
 (0)