aboutsummaryrefslogtreecommitdiff
path: root/store/works/life/algorithm-contest-2/solution
diff options
context:
space:
mode:
Diffstat (limited to 'store/works/life/algorithm-contest-2/solution')
-rw-r--r--store/works/life/algorithm-contest-2/solution/1.cpp34
-rw-r--r--store/works/life/algorithm-contest-2/solution/2.cpp41
-rw-r--r--store/works/life/algorithm-contest-2/solution/3.cpp77
-rw-r--r--store/works/life/algorithm-contest-2/solution/4.cpp48
-rw-r--r--store/works/life/algorithm-contest-2/solution/5-bf.cpp34
-rw-r--r--store/works/life/algorithm-contest-2/solution/5.cpp49
6 files changed, 283 insertions, 0 deletions
diff --git a/store/works/life/algorithm-contest-2/solution/1.cpp b/store/works/life/algorithm-contest-2/solution/1.cpp
new file mode 100644
index 0000000..2689f9d
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/1.cpp
@@ -0,0 +1,34 @@
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+
+int x, y;
+
+int main(void) {
+ cin >> x >> y;
+ int ans = x;
+ while (x >= y) {
+ ans += x / y;
+ x = x / y + x % y;
+ }
+ cout << ans;
+ return 0;
+} \ No newline at end of file
diff --git a/store/works/life/algorithm-contest-2/solution/2.cpp b/store/works/life/algorithm-contest-2/solution/2.cpp
new file mode 100644
index 0000000..4410da0
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/2.cpp
@@ -0,0 +1,41 @@
+#define _CRT_SECURE_NO_WARNINGS
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+const int MAXN = 1e5 + 5;
+int n, a[MAXN];
+
+int main(void) {
+ cin >> n;
+ for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
+ sort(a + 1, a + 1 + n);
+
+ int l = 1, r = n;
+ ll ans = 0;
+
+ while (l < r) {
+ ans += (a[r--] - a[l++]);
+ }
+ cout << ans;
+ return 0;
+} \ No newline at end of file
diff --git a/store/works/life/algorithm-contest-2/solution/3.cpp b/store/works/life/algorithm-contest-2/solution/3.cpp
new file mode 100644
index 0000000..a97e351
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/3.cpp
@@ -0,0 +1,77 @@
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+struct node{
+ int x, y;
+ node(){}
+ node(int _x = 0,int _y = 0): x(_x), y(_y){}
+};
+
+int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
+int n;
+vector<string> graph;
+vector<vector<int>> vis;
+
+int solve() {
+ queue<node> Q;
+ for(int i = 0;i < n;++i){
+ for(int j = 0;j < n;++j){
+ if(graph[i][j] == '#') Q.push(node(i,j));
+ vis[i][j] = 0;
+ }
+ }
+
+ if(Q.size() == n * n || Q.empty()) return -1;
+
+ int dis = 0;
+ while(!Q.empty()){
+ int size = Q.size();
+ while(size-- > 0){
+ node cur = Q.front();
+ Q.pop();
+ for(int i = 0;i < 4;i++){
+ int nextX = cur.x + dir[i][0];
+ int nextY = cur.y + dir[i][1];
+ if(nextX > -1 && nextX < n && nextY > -1 && nextY < n && graph[nextX][nextY] == '.' && !vis[nextX][nextY]){
+ vis[nextX][nextY] = 1;
+ Q.push(node(nextX,nextY));
+ }
+ }
+ }
+ if(!Q.empty()) dis += 1;
+ }
+ return dis;
+}
+
+int main(void) {
+ cin >> n;
+ string line;
+ vis.resize(n + 1, vector<int>(n + 1));
+ for (int i = 0; i < n; i++) {
+ cin >> line;
+ graph.push_back(line);
+ }
+
+ cout << solve();
+ return 0;
+} \ No newline at end of file
diff --git a/store/works/life/algorithm-contest-2/solution/4.cpp b/store/works/life/algorithm-contest-2/solution/4.cpp
new file mode 100644
index 0000000..93c9190
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/4.cpp
@@ -0,0 +1,48 @@
+#define _CRT_SECURE_NO_WARNINGS
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#define x first
+#define y second
+#define pub push_back
+#define MP make_pair
+#define LL long long
+using namespace std;
+typedef pair<int, int> PII;
+
+const int MAXN = 1e5 + 5;
+int n, k, h[MAXN], w[MAXN];
+
+bool check(int m) {
+ if (m == 0) return true;
+ int cnt = 0;
+ for (int i = 0; i < n; i++) {
+ cnt += (h[i] / m) * (w[i] / m);
+ }
+ return cnt >= k;
+}
+
+int main(void) {
+ cin >> n >> k;
+ int mx = 0;
+ for (int i = 0; i < n; i++) {
+ scanf("%d", &h[i]);
+ scanf("%d", &w[i]);
+ mx = max(mx, max(h[i], w[i]));
+ }
+
+ int l = 0, r = mx;
+ while (l < r) {
+ int m = (l + r + 1) >> 1;
+ if (check(m)) l = m;
+ else r = m - 1;
+ }
+ cout << r;
+ return 0;
+} \ No newline at end of file
diff --git a/store/works/life/algorithm-contest-2/solution/5-bf.cpp b/store/works/life/algorithm-contest-2/solution/5-bf.cpp
new file mode 100644
index 0000000..f197e6b
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/5-bf.cpp
@@ -0,0 +1,34 @@
+#include <iostream>
+
+int batteries[1000];
+
+int main(void) {
+ int N, K;
+ std::cin >> N >> K;
+ for (int i = 0; i < N; i++)
+ std::cin >> batteries[i];
+
+ int max = 0;
+ int max_index[4];
+
+ for (int i = 0; i < N; i++) {
+ for (int j = i + 1; j < N; j++) {
+ for (int k = j + 1; k < N; k++) {
+ for (int l = k + 1; l < N; l++) {
+ int sum = batteries[i] + batteries[j] + batteries[k] + batteries[l];
+ if (sum % K == 0 && sum > max) {
+ max = sum;
+ max_index[0] = i;
+ max_index[1] = j;
+ max_index[2] = k;
+ max_index[3] = l;
+ }
+ }
+ }
+ }
+ }
+
+ std::cout << max;
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/solution/5.cpp b/store/works/life/algorithm-contest-2/solution/5.cpp
new file mode 100644
index 0000000..b668f95
--- /dev/null
+++ b/store/works/life/algorithm-contest-2/solution/5.cpp
@@ -0,0 +1,49 @@
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+int dp[1005][5][1005];
+int n, K, a[1005];
+
+int main(void) {
+ // freopen("3.in", "r", stdin);
+ cin >> n >> K;
+ for (int i = 1; i <= n; i++) cin >> a[i];
+
+ for (int i = 0; i < 1005; i++)
+ for (int j = 0; j < 4; j++)
+ for (int k = 0; k < 1005; k++)
+ dp[i][j][k] = INT_MIN;
+
+ dp[0][0][0] = 0;
+
+ for (int i = 1; i <= n; i++)
+ for (int j = 0; j <= 4; j++)
+ for (int k = 0; k < K; k++) {
+ if (j == 0) dp[i][j][k] = dp[i - 1][j][k];
+ else dp[i][j][k] = max(dp[i - 1][j][k], dp[i - 1][j - 1][((k - a[i]) % K + K) % K] + a[i]);
+ }
+
+
+ cout << dp[n][4][0];
+ return 0;
+} \ No newline at end of file