Skip to content

Instantly share code, notes, and snippets.

@5teven1in
Created June 8, 2021 11:23
Show Gist options
  • Save 5teven1in/3023df5fd25effd145bbaed7782039d7 to your computer and use it in GitHub Desktop.
Save 5teven1in/3023df5fd25effd145bbaed7782039d7 to your computer and use it in GitHub Desktop.
TOI202105 新手組
#include <bits/stdc++.h>
using namespace std;
void print(const string &s, int start, int end, char dir)
{
if (dir == '+')
{
for (int i = start + 1; i < end; i++)
cout << s[i];
}
else if (dir == '-')
{
for (int i = end - 1; i > start; i--)
cout << s[i];
}
}
int main()
{
string s;
cin >> s;
vector<int> v_idx;
for (int i = 0; i < s.length(); i++)
{
if (s[i] == '+' || s[i] == '-')
v_idx.push_back(i);
}
if (v_idx.empty())
{
cout << s;
return 0;
}
int idx = v_idx[0];
char dir = '+';
print(s, -1, idx, dir);
dir = s[idx];
for (int i = 1; i < v_idx.size(); i++)
{
print(s, idx, v_idx[i], dir);
idx = v_idx[i];
dir = s[idx];
}
if (idx != s.length() - 1)
print(s, idx, s.length(), dir);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef pair<char, int> PCI;
bool cmp(const PCI &a, const PCI &b)
{
if (a.second == b.second)
return a.first < b.first;
return a.second > b.second;
}
int main()
{
string s;
cin >> s;
map<char, int> char_cnt;
for (auto &x : s)
{
char_cnt[x]++;
}
vector<PCI> ans(char_cnt.begin(), char_cnt.end());
sort(ans.begin(), ans.end(), cmp);
for (auto &x : ans)
{
cout << x.first;
}
}
#include <bits/stdc++.h>
using namespace std;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
int main()
{
int R, C;
cin >> R >> C;
int area[R + 5][C + 5] = {0};
int ans[R + 5][C + 5] = {0};
for (int i = 1; i <= R; i++)
{
for (int j = 1; j <= C; j++)
cin >> area[i][j];
}
for (int i = 0; i <= R + 1; i++)
{
area[i][0] = 0;
area[i][C + 1] = 0;
}
for (int j = 0; j <= C + 1; j++)
{
area[0][j] = 0;
area[R + 1][j] = 0;
}
memcpy(ans, area, sizeof(ans));
for (int i = 1; i <= R; i++)
{
for (int j = 1; j <= C; j++)
{
if (area[i][j] != 0)
continue;
int z_cnt = 0;
int sum = 0;
for (int k = 0; k < 4; k++)
{
int n_x = i + dx[k];
int n_y = j + dy[k];
sum += area[n_x][n_y];
if (!area[n_x][n_y])
z_cnt++;
}
ans[i][j] = (z_cnt == 4) ? 0 : sum / (4 - z_cnt);
}
}
for (int i = 1; i <= R; i++)
{
for (int j = 1; j <= C; j++)
{
cout << ans[i][j] << " ";
}
cout << endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment