Your title here...
hi I got msgs from system that my solutions matches with some other people I was very curious so I check my solution and a solution of person from which my solution match according to system his user was byteplay_studios
his solution for C problem in edu round 174
include
include
using namespace std;
const int MOD = 998244353;
int main(){ ios::sync_with_stdio(false); cin.tie(nullptr);
int t;
cin >> t;
int maxExp = 200000 + 5;
vector<int> pow2(maxExp + 1, 0), inv2(maxExp + 1, 0);
pow2[0] = 1;
for (int i = 1; i <= maxExp; i++){
long long tmp = (long long) pow2[i - 1] * 2;
tmp %= MOD;
pow2[i] = (int) tmp;
}
inv2[0] = 1;
const int invTwo = 499122177;
for (int i = 1; i <= maxExp; i++){
long long tmp = (long long) inv2[i - 1] * invTwo;
tmp %= MOD;
inv2[i] = (int) tmp;
}
while(t--){
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++){
cin >> a[i];
}
vector<int> P(n + 1, 0);
for (int i = 1; i <= n; i++){
P[i] = P[i - 1] + (a[i] == 2);
}
vector<int> suff(n + 2, 0);
for (int i = n; i >= 1; i--){
int addVal = 0;
if(a[i] == 3){
addVal = pow2[P[i - 1]];
}
suff[i] = (suff[i + 1] + addVal) % MOD;
}
vector<int> suffCount3(n + 2, 0);
for (int i = n; i >= 1; i--){
suffCount3[i] = suffCount3[i + 1] + (a[i] == 3);
}
long long ans = 0;
for (int i = 1; i <= n; i++){
if(a[i] == 1){
long long contribution = ((long long) suff[i + 1] * inv2[P[i]]) % MOD;
contribution = (contribution - suffCount3[i + 1]) % MOD;
if(contribution < 0)
contribution += MOD;
ans = (ans + contribution) % MOD;
}
}
cout << ans % MOD << "\n";
}
return 0;}
My solution
include
include
using namespace std;
const int M = 998244353; const int MX = 200005;
int main() { ios::sync_with_stdio(false); cin.tie(nullptr);
int t;
cin >> t;
vector<long long> p(MX);
vector<long long> ip(MX);
p[0] = 1;
for (int i = 1; i < MX; i++) {
p[i] = (p[i - 1] * 2LL) % M;
}
const long long v = 499122177;
ip[0] = 1;
for (int i = 1; i < MX; i++) {
ip[i] = (ip[i - 1] * v) % M;
}
while (t--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
long long r = 0;
long long s = 0;
int o = 0;
int w = 0;
for (int i = 0; i < n; i++) {
if (a[i] == 1) {
s = (s + ip[w]) % M;
o++;
}
else if (a[i] == 2) {
w++;
}
else if (a[i] == 3) {
long long c = ((p[w] * s) % M - o) % M;
if (c < 0) {
c += M;
}
r = (r + c) % M;
}
}
cout << r << "\n";
}
return 0;}
I think this is a bug or smt I want to say to [user:MikeMirzuhanov]plz reconsider the system desicion thsm



