diff --git a/CCC/.cph/.ccc18s5.cpp_f9f335d5cb431b83a2e9d98e1f8d8278.prob b/CCC/.cph/.ccc18s5.cpp_f9f335d5cb431b83a2e9d98e1f8d8278.prob new file mode 100644 index 0000000..c4b8ef2 --- /dev/null +++ b/CCC/.cph/.ccc18s5.cpp_f9f335d5cb431b83a2e9d98e1f8d8278.prob @@ -0,0 +1 @@ +{"name":"Local: ccc18s5","url":"f:\\GitHub\\Practice\\CCC\\ccc18s5.cpp","tests":[{"id":1612643370314,"input":"2 3 4 1\n2 3 5\n3 2 7\n1 2 6\n1 1 8\n2 1 5","output":"41"}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"f:\\GitHub\\Practice\\CCC\\ccc18s5.cpp","group":"local","local":true} \ No newline at end of file diff --git a/CCC/16s5.cpp b/CCC/16s5.cpp index cb97e64..2ac62fb 100644 --- a/CCC/16s5.cpp +++ b/CCC/16s5.cpp @@ -1,20 +1,22 @@ -#include -#include "math.h" +#include +using namespace std; + typedef long long ll; +const int MX = 100000 + 5; -bool circleA[100005]; -bool circleB[100005]; +bool circleA[MX]; +bool circleB[MX]; bool A; -ll n, t; +ll N, T; ll wrap(ll a, ll b){ - ll temp = (a+b)%n; - return temp<0?temp+n:temp; + ll temp = (a+b)%N; + return temp<0?temp+N:temp; } void evaluate(ll k){ - // printf("evaled %lld\n", k); - for (ll j = 0; j < n; j++) + // printf("evaled %lld\N", k); + for (ll j = 0; j < N; j++) { if (A) circleB[j] = circleA[wrap(j,k)] ^ circleA[wrap(j,-k)]; @@ -25,29 +27,27 @@ void evaluate(ll k){ } int main() { - scanf("%lld %lld", &n, &t); - for (int i = 0; i < n; i++) - { - //only read 1 number - scanf("%1d", &circleA[i]); - } + scanf("%lld %lld", &N, &T); + scanf("%s", circleA); //Why does this work!? + // for (int i = 0; i < N; i++) + // printf("%d ", circleA[i]); A = true; - ll log2t = log2(t); + ll log2t = log2(T); for(int i = log2t; i>=1 ; i--){ ll temp = pow(2,i); - if(temp<=t){ - t-=temp; + if(temp<=T){ + T-=temp; evaluate(temp); } } - if(t==1){ - t-=1; + if(T==1){ + T-=1; evaluate(1); } - for (int i = 0; i < n; i++) + for (int i = 0; i < N; i++) { if(A) printf("%d", circleA[i]); diff --git a/CCC/ccc01s2exact.cpp b/CCC/ccc01s2exact.cpp index 3998fb6..bcbbcf6 100644 --- a/CCC/ccc01s2exact.cpp +++ b/CCC/ccc01s2exact.cpp @@ -1,37 +1,10 @@ #include using namespace std; -typedef long long ll; -typedef unsigned long long ull; -typedef long double ld; -typedef pair pi; -typedef pair pli; -typedef pair pil; -typedef pair pl; -typedef pair pd; - -typedef vector vi; -typedef vector vd; -typedef vector vl; -typedef vector vpi; -typedef vector vpl; - -#define INF 0x3f3f3f3f // for int -#define LL_INF 0x3f3f3f3f3f3f3f3f // for ll -#define sz(st) (int)(st).size() -#define ms(st, ed) memset(st, ed, sizeof(st)) -#define mp make_pair -#define pb push_back -#define f first -#define s second -#define lb lower_bound -#define ub upper_bound -#define all(st) st.begin(), st.end() -#define ins insert const int MOD = 1000000007, MX = 20 + 5; int T, st, ed; -pi shift[] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}}; +int shift[4][2] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}}; int output[MX][MX]; int numberLength(int n) @@ -44,7 +17,7 @@ int numberLength(int n) void solve() { - memset(output, 0, sizeof(shift)); + memset(output, 0, sizeof(output)); scanf("%d %d", &st, &ed); int length = 0; @@ -64,8 +37,8 @@ void solve() for (int j = 0; j < length && cur <= ed; j++) { - row += shift[direction].f; - col += shift[direction].s; + row += shift[direction][0]; + col += shift[direction][1]; output[row][col] = cur; output[0][col] = max(output[0][col], numberLength(cur)); b = min(row, b); t = max(row, t); l = min(col, l); r = max(col, r); diff --git a/CCC/ccc18s5.cpp b/CCC/ccc18s5.cpp new file mode 100644 index 0000000..a32a909 --- /dev/null +++ b/CCC/ccc18s5.cpp @@ -0,0 +1,105 @@ +#include +using namespace std; +typedef long long ll; +typedef unsigned long long ull; +typedef long double ld; +typedef pair pi; +typedef pair pli; +typedef pair pil; +typedef pair pl; +typedef pair pd; + +typedef vector vi; +typedef vector vd; +typedef vector vl; +typedef vector vpi; +typedef vector vpl; + +#define INF 0x3f3f3f3f // for int +#define LL_INF 0x3f3f3f3f3f3f3f3f // for ll +#define sz(x) (int)(x).size() +#define ms(x, y) memset(x, y, sizeof(x)) +#define mp make_pair +#define pb push_back +#define lb lower_bound +#define ub upper_bound +#define all(x) x.begin(), x.end() +#define ins insert + +const int MOD = 1000000007, MX = 100000 + 5; + +struct E +{ + int u, v, w; + bool f; +}; + +int N, M, P, Q, r[MX], c[MX], row, col; +vector e; +ll tot, mst; + +int fd(int d, int p[]) +{ + if (p[d] != d) + p[d] = fd(p[d], p); + return p[d]; +} + +int main() +{ + scanf("%d %d %d %d", &N, &M, &P, &Q); + row = N; + col = M; + for (int i = 1, u, v, w; i <= P; i++) + { + scanf("%d %d %d", &u, &v, &w); + e.pb(E{u, v, w, 0}); + tot += (ll)N * w; + } + for (int i = 1, u, v, w; i <= Q; i++) + { + scanf("%d %d %d", &u, &v, &w); + e.pb(E{u, v, w, 1}); + tot += (ll)M * w; + } + sort(all(e), [](E x, E y) { return x.w < y.w; }); + + /* Disjoint set initialization */ + for (int i = 1; i <= N; i++) + r[i] = i; + for (int i = 1; i <= M; i++) + c[i] = i; + + for (E x : e) + { + if (x.f) + { //vertical edge + if (row == 1) + continue; + int fu = fd(x.u, r), fv = fd(x.v, r); + if (fu != fv) + { + r[fu] = fv; + row--; + mst += (ll)x.w * col; + } + } + else + { //horizontal edge + if (col == 1) + continue; + int fu = fd(x.u, c), fv = fd(x.v, c); + if (fu != fv) + { + c[fu] = fv; + col--; + mst += (ll)x.w * row; + } + } + if (row == 1 && col == 1) + break; + } + + printf("%lld", tot - mst); + return 0; +} \ No newline at end of file