Hello everyone,↵
↵
I participated in the Educational Round 73 contest and solved problems A to E, but I had a bug in my solution to B and the round was unrated for me in the end. However, despite this I would still be looking at an increase in rating of about +25 (which is admittedly still quite disappointing compared to the +214 the CF-Predictor was claiming during the contest).↵
↵
I don't think that it's particularly fair that the people that would have had positive deltas even with a 0 for problem B got denied their rating change. By my standards I had an outstanding contest yesterday, and while it sucks get screwed over by the checker for B, it sucks even more to solve 4 other problems and be denied that only because I had a wrong submission on B (if I just skipped over B and didn't submit B at all I wouldn't have this problem). I'm sure this happened to some other people as well, and that sucks, because they were also probably having a really good contest and in the end got nothing for it.↵
↵
To clarify, the purpose of this post is not to bash on the fact that there was a bug in the checker for problem B, I understand that things like that happen. I just don't like the way the rating changes were addressed afterwards. To finish on a lighter note, you can try and find the bug that cost me ~200 rating.↵
↵
<spoiler summary="The code">↵
~~~~~↵
#pragma GCC optimize "O3"↵
#include <bits/stdc++.h>↵
#include <ext/pb_ds/assoc_container.hpp>↵
↵
#define MP make_pair↵
#define MT make_tuple↵
#define PB push_back↵
#define F first↵
#define S second↵
#define X real()↵
#define Y imag()↵
#ifndef LOCAL↵
#define endl "\n"↵
#endif↵
↵
using namespace std;↵
using namespace chrono;↵
using namespace __gnu_pbds;↵
↵
typedef pair<int, int> ii;↵
typedef long long ll;↵
typedef pair<ll, ll> pll;↵
typedef long long C;↵
typedef complex<C> P;↵
↵
const int INF = 1e9;↵
const long long LLINF = 1e18;↵
const double PI = 3.14159265358979323;↵
const long long PRIME = (1ll << 31) - 1;↵
const long long PRIME2 = 269;↵
const long long MOD = 1e9 + 7;↵
↵
template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;↵
template <class T, class U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>;↵
template <class T> using hash_set = gp_hash_table<T, null_type>;↵
template <class T, class U> using hash_map = gp_hash_table<T, U>;↵
template <class T, class U> ostream& operator<< (ostream &out, pair<T, U> p) { return out << "(" << p.F << ", " << p.S << ")"; }↵
template <class T> ostream& operator<< (ostream &out, vector<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, ordered_set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, ordered_map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, hash_set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, hash_map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> T mod (T a, T b) { return (a%b + b)%b; }↵
template <class T> ll mod (T a) { return mod((ll)a, MOD); }↵
template <class T> int sign (T x) { return (x > 0) - (x < 0); }↵
C dot (P a, P b) { return a.X * b.X + a.Y * b.Y; }↵
C cross (P a, P b) { return a.X * b.Y - b.X * a.Y; }↵
↵
double startTime;↵
double currTime() { return duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count() / 1e9; }↵
double execTime() { return currTime() - startTime; }↵
↵
int main() {↵
#ifndef LOCAL↵
ios::sync_with_stdio(0);↵
cin.tie(0);↵
cout.tie(0);↵
#endif↵
srand(time(0));↵
startTime = currTime();↵
↵
int n;↵
cin >> n;↵
↵
char c[] = { 'W', 'B' };↵
vector<vector<char>> v(n, vector<char>(n));↵
int pl = 0;↵
for (int i = 0; i < n; i++)↵
for (int j = 0; j < n; j++) {↵
v[i][j] = c[pl];↵
pl ^= 1;↵
}↵
for (int i = 0; i < n; i++) {↵
for (int j = 0; j < n; j++)↵
cout << v[i][j];↵
cout << endl;↵
}↵
}↵
~~~~~↵
</spoiler>↵
↵
↵
<spoiler summary="A hint">↵
The only sample wasevenodd.↵
</spoiler>↵
↵
↵
I participated in the Educational Round 73 contest and solved problems A to E, but I had a bug in my solution to B and the round was unrated for me in the end. However, despite this I would still be looking at an increase in rating of about +25 (which is admittedly still quite disappointing compared to the +214 the CF-Predictor was claiming during the contest).↵
↵
I don't think that it's particularly fair that the people that would have had positive deltas even with a 0 for problem B got denied their rating change. By my standards I had an outstanding contest yesterday, and while it sucks get screwed over by the checker for B, it sucks even more to solve 4 other problems and be denied that only because I had a wrong submission on B (if I just skipped over B and didn't submit B at all I wouldn't have this problem). I'm sure this happened to some other people as well, and that sucks, because they were also probably having a really good contest and in the end got nothing for it.↵
↵
To clarify, the purpose of this post is not to bash on the fact that there was a bug in the checker for problem B, I understand that things like that happen. I just don't like the way the rating changes were addressed afterwards. To finish on a lighter note, you can try and find the bug that cost me ~200 rating.↵
↵
<spoiler summary="The code">↵
~~~~~↵
#pragma GCC optimize "O3"↵
#include <bits/stdc++.h>↵
#include <ext/pb_ds/assoc_container.hpp>↵
↵
#define MP make_pair↵
#define MT make_tuple↵
#define PB push_back↵
#define F first↵
#define S second↵
#define X real()↵
#define Y imag()↵
#ifndef LOCAL↵
#define endl "\n"↵
#endif↵
↵
using namespace std;↵
using namespace chrono;↵
using namespace __gnu_pbds;↵
↵
typedef pair<int, int> ii;↵
typedef long long ll;↵
typedef pair<ll, ll> pll;↵
typedef long long C;↵
typedef complex<C> P;↵
↵
const int INF = 1e9;↵
const long long LLINF = 1e18;↵
const double PI = 3.14159265358979323;↵
const long long PRIME = (1ll << 31) - 1;↵
const long long PRIME2 = 269;↵
const long long MOD = 1e9 + 7;↵
↵
template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;↵
template <class T, class U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>;↵
template <class T> using hash_set = gp_hash_table<T, null_type>;↵
template <class T, class U> using hash_map = gp_hash_table<T, U>;↵
template <class T, class U> ostream& operator<< (ostream &out, pair<T, U> p) { return out << "(" << p.F << ", " << p.S << ")"; }↵
template <class T> ostream& operator<< (ostream &out, vector<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, ordered_set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, ordered_map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> ostream& operator<< (ostream &out, hash_set<T> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T, class U> ostream& operator<< (ostream &out, hash_map<T, U> c) { for (auto it = c.begin(); it != c.end(); ++it) { if (it != c.begin()) out << " "; out << *it; } return out; }↵
template <class T> T mod (T a, T b) { return (a%b + b)%b; }↵
template <class T> ll mod (T a) { return mod((ll)a, MOD); }↵
template <class T> int sign (T x) { return (x > 0) - (x < 0); }↵
C dot (P a, P b) { return a.X * b.X + a.Y * b.Y; }↵
C cross (P a, P b) { return a.X * b.Y - b.X * a.Y; }↵
↵
double startTime;↵
double currTime() { return duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count() / 1e9; }↵
double execTime() { return currTime() - startTime; }↵
↵
int main() {↵
#ifndef LOCAL↵
ios::sync_with_stdio(0);↵
cin.tie(0);↵
cout.tie(0);↵
#endif↵
srand(time(0));↵
startTime = currTime();↵
↵
int n;↵
cin >> n;↵
↵
char c[] = { 'W', 'B' };↵
vector<vector<char>> v(n, vector<char>(n));↵
int pl = 0;↵
for (int i = 0; i < n; i++)↵
for (int j = 0; j < n; j++) {↵
v[i][j] = c[pl];↵
pl ^= 1;↵
}↵
for (int i = 0; i < n; i++) {↵
for (int j = 0; j < n; j++)↵
cout << v[i][j];↵
cout << endl;↵
}↵
}↵
~~~~~↵
</spoiler>↵
↵
↵
<spoiler summary="A hint">↵
The only sample was
</spoiler>↵
↵