Submission #22664377


Source Code Expand

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
#include<queue>
#include<stack>
#include<bitset>
#include<unordered_map>
#include<functional>
#include<map>
#include<iomanip>
#include<limits>
#include<unordered_set>
#include<cmath>
#include <numeric>
#include <array>
#include<utility>
#include <complex>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
#pragma region define
#define M_PI 3.141592653589793238
#define upperbound(v,val) upper_bound(v.begin(),v.end(),val)-v.begin()
#define lowerbound(v,val) lower_bound(v.begin(),v.end(),val)-v.begin()
#define int long long
#define vel vector<long long>
#define vvel vector<vel>
#define rep(i,n) for(int i=0;i<n;i++)
#define rrep(i,l,r) for(int i=l;i<r;i++)
#define sor(v) sort(v.begin(),v.end())
#define mmax(a,b) a=max(a,b)
#define mmin(a,b) a=min(a,b)
#define mkp(a,b) make_pair(a,b)
#define pin pair<int,int>
#define qin pair<pin,int>
#define V vector
#define Endl endl
#define veb vector<bool>
#define fcout cout << fixed << setprecision(15)
#define rev(s) reverse(s.begin(),s.end())
#define lower(h,val) (lower_bound(h.begin(),h.end(),val)-h.begin())
#define upper(h,val) (upper_bound(h.begin(),h.end(),val)-h.begin())
#define vveb V<veb>
#define omajinai cin.tie(0);ios::sync_with_stdio(false);
#define endl "\n"
#define pb push_back
#pragma endregion
#pragma region Inner Class
int root(int x, vel& pa) {
	if (pa[x] == -1) { return x; }
	int ans = root(pa[x], pa); pa[x] = ans;
	return ans;
}
bool mar(int x, int y, vel& pa) {
	x = root(x, pa);
	y = root(y, pa);
	if (x != y) { pa[x] = y; }
	return (x != y);
}
int gcd(int x, int y) {
	if (x < y) { return gcd(y, x); }
	if (y == 0) { return x; }
	return gcd(y, x % y);
}
int lcm(int x, int y) {
	x = abs(x); y = abs(y);
	return x * (y / gcd(x, y));
}
long long modinv(long long a, long long m) {
	long long b = m, u = 1, v = 0;
	while (b) {
		long long t = a / b;
		a -= t * b; swap(a, b);
		u -= t * v; swap(u, v);
	}
	u %= m;
	if (u < 0) u += m;
	return u;
}
vel dijk(V<V<pin>> way, int st, int inf) {
	int n = way.size();
	vel dist(n, inf); dist[st] = 0;
	priority_queue<pin, vector<pin>, greater<pin>> pq;
	pq.push(mkp(0, st));
	veb is_checked(n, false);
	while (!pq.empty()) {
		pin x = pq.top(); pq.pop();
		int pot = x.second;
		if (!is_checked[pot]) {
			is_checked[pot] = true;
			for (auto y : way[pot]) {
				int nex_dist = x.first + y.second;
				int nex_pot = y.first;
				if (dist[nex_pot] > nex_dist) {
					dist[nex_pot] = nex_dist;
					pq.push(mkp(nex_dist, y.first));
				}
			}
		}
	}
	return dist;
}
V<V<pin>> make_w(vvel v) {
	int n = v.size();
	V<V<pin>> ret(n);
	rep(i, n) {
		for (int x : v[i]) {
			ret[i].push_back(mkp(x, 1));
		}
	}
	return ret;
}
void make_tree(vvel& chi, vel& par, int n) {
	V<V<pin>> way(n);
	rep(i, n - 1) {
		int a, b; cin >> a >> b; a--; b--;
		way[a].push_back(mkp(b, 1));
		way[b].push_back(mkp(a, 1));
	}
	vel dist = dijk(way, 0, n + 1);
	par = vel(n, -1);
	chi = vvel(n);
	rep(i, n) {
		for (auto nex : way[i]) {
			int pot = nex.first;
			if (dist[pot] > dist[i]) { chi[i].push_back(pot); }
			else { par[i] = pot; }
		}
	}
}
void pri(vel& v) {
	if (v.size() == 0) { return; }
	cout << v[0];
	rep(i, v.size() - 1) { cout << " " << v[i + 1]; }
	cout << endl;
	return;
}
vvel disj_min(vel& v) {
	int n = v.size();
	vvel ret(22, vel(n));
	ret[0] = v;
	rep(i, 21) {
		rep(j, n) {
			int nex = j + (1 << i);
			if (nex < n) {
				ret[i + 1][j] = min(ret[i][j], ret[i][nex]);
			}
			else {
				ret[i + 1][j] = ret[i][j];
			}
		}
	}
	return ret;
}
int find_min(vvel& dv, int l, int r) {
	int i = 21;
	while (l + (1 << i) > r) {
		i--;
	}
	while (i >= 0) {
		if (dv[i][l] > dv[i][r - (1 << i)]) {
			l = r - (1 << i);
		}
		else {
			r = l + (1 << i);
		}
		i--;
	}
	return l;
}
V<V<pin>> dbl(V<pin>& v) {
	V<V<pin>> ans(20, V<pin>(v));
	int n = v.size();
	rep(i, 19) {
		rep(j, n) {
			ans[i + 1][j].first = ans[i][ans[i][j].first].first;
			ans[i + 1][j].second = max(ans[i][j].second, ans[i][ans[i][j].first].second);
		}
	}
	return ans;
}
int lca(int s, int t, int diff, V<V<pin>>& pa) {
	if (diff < 0) { return lca(t, s, -diff, pa); }
	int ans = 0;
	rep(i, 19) {
		if ((diff & (1 << i)) != 0) {
			mmax(ans, pa[i][s].second);
			s = pa[i][s].first;
		}
	}
	for (int i = 19; i >= 0; i--) {
		if (pa[i][s] != pa[i][t]) {
			mmax(ans, pa[i][s].second);
			s = pa[i][s].first;
			mmax(ans, pa[i][t].second);
			t = pa[i][t].first;
		}
	}
	if (s != t) {
		mmax(ans, pa[0][s].second);
		mmax(ans, pa[0][t].second);
	}
	return ans;
}
void alp(int n, vel& pr) {
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			pr.push_back(i);
			while (n % i == 0) { n /= i; }
		}
	}
	if (n != 1) { pr.push_back(n); }
}
vel dx = { 0,0,-1,1,1,-1 };
vel dy = { 1,-1,0,0,1,1 };
#define all(a) a.begin(),a.end()
template<typename T>
void mk_uni(V<T>& a) {
	std::sort(a.begin(), a.end());
	a.erase(std::unique(a.begin(), a.end()), a.end());
}
/*#include <cstdint>

template <std::uint_fast64_t Modulus> class modint {
	using u64 = std::uint_fast64_t;

public:
	u64 a;

	constexpr modint(const u64 x = 0) noexcept : a(x% Modulus) {}
	constexpr u64& value() noexcept { return a; }
	constexpr const u64& value() const noexcept { return a; }
	constexpr modint operator+(const modint rhs) const noexcept {
		return modint(*this) += rhs;
	}
	constexpr modint operator-(const modint rhs) const noexcept {
		return modint(*this) -= rhs;
	}
	constexpr modint operator*(const modint rhs) const noexcept {
		return modint(*this) *= rhs;
	}
	constexpr modint operator/(const modint rhs) const noexcept {
		return modint(*this) /= rhs;
	}
	constexpr modint& operator+=(const modint rhs) noexcept {
		a += rhs.a;
		if (a >= Modulus) {
			a -= Modulus;
		}
		return *this;
	}
	constexpr modint& operator-=(const modint rhs) noexcept {
		if (a < rhs.a) {
			a += Modulus;
		}
		a -= rhs.a;
		return *this;
	}
	constexpr modint& operator*=(const modint rhs) noexcept {
		a = a * rhs.a % Modulus;
		return *this;
	}
	constexpr modint& operator/=(modint rhs) noexcept {
		u64 exp = Modulus - 2;
		while (exp) {
			if (exp % 2) {
				*this *= rhs;
			}
			rhs *= rhs;
			exp /= 2;
		}
		return *this;
	}
};*/

using mint = modint1000000007;

using vem = vector<mint>;
using vvem = vector<vem>;
#pragma region mint
mint mpow(mint a, int n) {
	mint ans = 1;
	while (n) {
		if (n & 1) { ans *= a; }
		a *= a; n /= 2;
	}
	return ans;
}
vem kai, inv_kai;
void make_kai(int n) {
	kai = vem(n + 1, 1);
	inv_kai = vem(n + 1, 1);
	rep(i, n) { kai[i + 1] = kai[i] * (i + 1); }
	inv_kai[n] = (mint)1 / kai[n];
	for (int i = n; i > 0; i--) { inv_kai[i - 1] = inv_kai[i] * i; }
}
mint com(int n, int r) {
	if (n < 0 || r < 0 || n < r) { return 0; }
	return kai[n] * inv_kai[r] * inv_kai[n - r];
}
mint per(int n, int r) {
	if (n < 0 || r < 0 || n < r) { return 0; }
	return kai[n] * inv_kai[r];
}
#pragma endregion
string s;
int inf = 1e7;
pin f2(vel& x, vel& y) {
	int sum = 0;
	rep(i, 26) { 
		sum += x[i] + y[i];
		x[i] *= 100; x[i] += i;
		y[i] *= 100; y[i] += i;
	}
	sor(x); rev(x);
	sor(y); rev(y);
	int fi = sum - (x[0] / 100) - (y[0] / 100);
	if (x[0] % 100 != y[0] % 100) { return mkp(fi, (int)0); }
	x[0] /= 100; y[0] /= 100; x[1] /= 100; y[1] /= 100;
	return mkp(sum - x[0] - y[0], min(x[0] - x[1], y[0] - y[1]));
}
int f1(vel& x) {
	int sum = 0;
	int mx = 0;
	for (auto w : x) { sum += w; mmax(mx, w); }
	return sum - mx;
}
int cnt[61];
bool sol(vvel& a, int x) {
	veb exi(32, false);
	exi[0] = true;
	int n = a.size();
	rep(i, n) {
		int cnt = 0;
		rep(j, 5) {
			if (a[i][j] >= x) { cnt += (1 << j); }
		}
		exi[cnt] = true;
	}
	rep(i, 32) {
		if (exi[i]) {
			rep(j, 32) {
				if (exi[j]) {
					rep(k, 32) {
						if (exi[k]) {
							if ((i | j | k) == 31) {
								return true;
							}
						}
					}
				}
			}
		}
	}
	return false;
}
int r, c;
int ind(int qr, int qc) { return qr * c + qc; }
vel sol(int p, int a, int b) {
	int inva = modinv(a, p);
	int invb = modinv(b, p);
	vel ans;
	int x = 1;
	vel use(p, false);
	while (!use[x]) {
		ans.push_back(x); use[x] = true;
		x *= a; x %= p;
	}
	x *= inva; x *= b; x %= p;
	bool fl = true;
	while (!use[x]) {
		ans.push_back(x); use[x] = true;
		int nex = x * b;
		if (!fl) { nex = x * invb; }
		nex %= p;
		if (use[nex]) {
			nex = x * inva; nex %= p;
			fl = !fl;
		}
		x = nex;
	}
	if (ans.size() < p - 1||(ans.back()!=invb&&ans.back()!=inva&&ans.back()!=a&&ans.back()!=b)) { return {-1000}; }
	ans.push_back(1);
	return ans;
}
signed main() {
	int n; cin >> n;
	string s, t; cin >> s >> t;
	vel qs, qt;
	int cnt = 0;
	rep(i, n) {
		if (s[i] == '1') { cnt++; qs.push_back(i); }
		if (t[i] == '1') { qt.push_back(i); }
	}
	if (cnt != qt.size()) { cout << -1 << endl; return 0; }
	int now_max = -2;
	int ans = 0;
	rep(i, cnt) {
		if (qs[i] <= qt[i]) {
			mmax(qs[i], now_max+1);
			int dif = qt[i] - qs[i];
			ans += dif;
			mmax(now_max, qt[i]);
		}
	}
	int now_min = n+2;
	for (int i = cnt - 1; i >= 0; i--) {
		if (qs[i] > qt[i]) {
			mmin(qs[i], now_min-1);
			int dif = qs[i] - qt[i];
			ans += dif;
			mmin(now_min, qt[i]);
		}
	}
	cout << ans << endl;
	return 0;
}

Submission Info

Submission Time
Task B - Electric Board
User b2563125
Language C++ (GCC 9.2.1)
Score 500
Code Size 9528 Byte
Status AC
Exec Time 39 ms
Memory 13096 KiB

Compile Error

./Main.cpp:23: warning: ignoring #pragma region define [-Wunknown-pragmas]
   23 | #pragma region define
      | 
./Main.cpp:24: warning: "M_PI" redefined
   24 | #define M_PI 3.141592653589793238
      | 
In file included from /usr/include/c++/9/cmath:45,
                 from ./Main.cpp:15:
/usr/include/math.h:777: note: this is the location of the previous definition
  777 | # define M_PI  3.14159265358979323846 /* pi */
      | 
./Main.cpp:49: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
   49 | #pragma endregion
      | 
./Main.cpp:50: warning: ignoring #pragma region Inner [-Wunknown-pragmas]
   50 | #pragma region Inner Class
      | 
./Main.cpp:282: warning: ignoring #pragma region mint [-Wunknown-pragmas]
  282 | #pragma region mint
      | 
./Main.cpp:307: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
  307 | #pragma endregion
      | 
./Main.cpp: In function ‘void pri(std::vector<long long int>&)’:
./Main.cpp:30:31: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::vector<long long int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   30 | #define rep(i,n) for(int i=0;i<n;i++)
......
  136 |  rep(i, v.size() - 1) { cout << " " << v[i + 1]; }
      |      ~~~~~~~~~~~~~~~           
./Main.cpp:136:2: note: in expansion of macro ‘rep’
  136 |  rep(i, v.size() - 1) { cout << " " << v[i + 1]; }
      |  ^~~
./Main.cpp: In function ‘std::vector<long long int> sol(long long int, long long int, long long int)’:
./Main.cpp:384:17: warning: comparison of integer expressions of different signedness: ‘std::vector<long long int>::size_type’ {aka ‘long unsigned int’} and ‘long long int’ [-Wsign-compare]
  384 |  if (ans.size() < p - 1||(ans.back()!=invb&&ans.back()!=inva&&ans.back()!=a&&ans.back()!=b)) { return {-1000}; }
      |      ~~~~~~~~~~~^~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:397:10: warning: comparison of integer expressions of different signedness: ‘long long int’ and ...

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 4
AC × 30
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
Case Name Status Exec Time Memory
in01.txt AC 8 ms 3600 KiB
in02.txt AC 3 ms 3700 KiB
in03.txt AC 2 ms 3548 KiB
in04.txt AC 28 ms 5312 KiB
in05.txt AC 24 ms 5396 KiB
in06.txt AC 29 ms 5392 KiB
in07.txt AC 28 ms 5220 KiB
in08.txt AC 32 ms 8036 KiB
in09.txt AC 31 ms 8304 KiB
in10.txt AC 39 ms 10480 KiB
in11.txt AC 38 ms 11952 KiB
in12.txt AC 35 ms 11884 KiB
in13.txt AC 38 ms 13000 KiB
in14.txt AC 35 ms 13096 KiB
in15.txt AC 25 ms 5976 KiB
in16.txt AC 29 ms 8824 KiB
in17.txt AC 2 ms 3608 KiB
in18.txt AC 2 ms 3560 KiB
in19.txt AC 38 ms 12664 KiB
in20.txt AC 34 ms 8416 KiB
in21.txt AC 37 ms 8480 KiB
in22.txt AC 38 ms 9012 KiB
in23.txt AC 36 ms 9136 KiB
in24.txt AC 6 ms 3544 KiB
in25.txt AC 3 ms 3652 KiB
in26.txt AC 2 ms 3640 KiB
sample_01.txt AC 2 ms 3648 KiB
sample_02.txt AC 2 ms 3652 KiB
sample_03.txt AC 2 ms 3600 KiB
sample_04.txt AC 2 ms 3552 KiB