Skip to content
This repository has been archived by the owner on Sep 5, 2024. It is now read-only.

問題: Three Coins #21

Merged
merged 6 commits into from
Aug 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions three-coins/PROBLEM
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
# -*- coding: utf-8; mode: python -*-

pid='three-coins'

problem(
time_limit=1.0,
id=pid,
time_limit=2.0,
id='b',
title="Three Coins",
)
29 changes: 22 additions & 7 deletions three-coins/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,19 @@

より形式的には、集合 $S$ を $S = \{ X_1, X_2, \ldots, X_M \} = \{ A_i + A_j + A_k \mid 1 \le i \le j \le k \le N \}$ と定めます。
このとき、 $S$ のすべての要素について XOR をとった結果、すなわち $X_1 \oplus X_2 \oplus \ldots \oplus X_M$ を求めてください。
ただし、 $\oplus$ は bitwise XOR を表します。
ただし、 $\oplus$ は XOR を表します。

<details>
<summary>XOR とは?</summary>
整数 $a, b$ の XOR $a \oplus b$ は、以下のように定義されます。

- $a \oplus b$ を二進表記した際の $2^k (k \ge 0)$ の位の数は、$a, b$ を二進表記した際の $2^k$ の位の数のうち一方のみが $1$ であれば $1$ 、そうでなければ $0$ である。

例えば、 $3 \oplus 5 = 6$ となります (二進表記すると: $011 \oplus 101=110$) 。

なお、この演算において、計算する順序によらず求める値は一意に定まります。

</details>

## 制約

Expand All @@ -22,11 +34,11 @@

### 部分点

この問題には部分点が設定されている
以下の条件を満たすテストケースすべてに正解した場合、記載された点数が得られる
この問題はいくつかの小課題に分けられ、その小課題の全てのテストケースに正解した場合に、「この小課題に正解した」とみなされます
提出したソースコードの得点は、正解した小課題の点数の合計となります

- (1 点) $N \le 200$
- (99 点) 追加の制約はない。
1. (10 点) $N \le 200$
2. (90 点) 追加の制約はない。

## 入力

Expand Down Expand Up @@ -93,6 +105,9 @@ A_1 A_2 ... A_N
重複を削除すると高々 $\log N$ 種類しかないので、あとは全探索。

- `sol-cpp-ac`: C++ AC
- `sol-py-ac`: Python AC
- `sol-cpy-ac`: CPython AC
- `sol-pypy-ac`: PyPy AC
- `sol-cpp-partial1`: C++ 部分点 1
- `sol-py-partial1`: Python 部分点 1
- `sol-cpy-partial1`: CPython 部分点 1
- `sol-pypy-partial1`: PyPy 部分点 1
- `sol-cpp-wa-multiset`: C++ WA (集合 $S$ を多重集合としている)
2 changes: 1 addition & 1 deletion three-coins/sol-cpp-partial1/SOLUTION
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# -*- coding: utf-8; mode: python -*-
cxx_solution(src='main.cc', flags=["-std=c++2a", "-O2"], challenge_cases=["*_all.in"])
expected_score(1)
expected_score(10)
3 changes: 3 additions & 0 deletions three-coins/sol-cpp-wa-multiset/SOLUTION
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# -*- coding: utf-8; mode: python -*-
cxx_solution(src='main.cc', flags=["-std=c++2a", "-O2"], challenge_cases=["*_task1.in", "*_all.in"])
expected_score(0)
21 changes: 21 additions & 0 deletions three-coins/sol-cpp-wa-multiset/main.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
int n;
cin >> n;
vector<ll> a(n);
rep(i, n) cin >> a[i];
a.erase(unique(a.begin(), a.end()), a.end());
multiset<ll> s;
assert(a.size() <= 100);
rep(i, a.size()) rep(j, a.size()) rep(k, a.size()) {
s.insert(a[i] + a[j] + a[k]);
}
ll ans = 0;
for (ll x : s) ans ^= x;
cout << ans << endl;
return 0;
}
2 changes: 1 addition & 1 deletion three-coins/sol-cpy-partial1/SOLUTION
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# -*- coding: utf-8; mode: python -*-
script_solution(src='main.py', challenge_cases=["*_all.in"])
expected_score(1)
expected_score(10)
2 changes: 1 addition & 1 deletion three-coins/sol-pypy-partial1/SOLUTION
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# -*- coding: utf-8; mode: python -*-
script_solution(src='main.py', challenge_cases=["*_all.in"])
expected_score(1)
expected_score(10)
5 changes: 2 additions & 3 deletions three-coins/tests/TESTSET
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# -*- coding: utf-8; mode: python -*-
cxx_validator(src='validator.cc', dependency=['testlib.h'], flags=["-std=c++2a", "-O2"])
cxx_judge(src='judge.cc', dependency=['testlib.h'], variant=testlib_judge_runner, flags=["-std=c++2a", "-O2"])
id='three-coins'
subtask_testset(name='Task 1', score=1, input_patterns=['*_task1.in'])
subtask_testset(name='All', score=99, input_patterns=['*_all.in'])
subtask_testset(name='Task 1', score=10, input_patterns=['*_task1.in'])
subtask_testset(name='All', score=90, input_patterns=['*_all.in'])