补题链接:https://codeforces.com/gym/104021
难得VP打出这么好的成绩,虽然是有争议的西部枢纽银川站,虽然没能早生几年。。。。
题意:
思路:
#include
using namespace std;int main(){cout<<"1 1 2 3 5\n";return 0;
}
题意:
思路:
#include
using namespace std;
const int maxn = 1010;
int a[maxn][maxn];int main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n; cin>>n;for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){cin>>a[i][j];}}for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= n; j ++ ) {if (a[i][j] == -1) {if (i > 1 && j > 1) {a[i][j] = a[i - 1][j] + (a[i][j - 1] - a[i - 1][j - 1]);} else if (i > 1 && j < n) {a[i][j] = a[i - 1][j] + (a[i][j + 1] - a[i - 1][j + 1]);} else if (i < n && j > 1) {a[i][j] = a[i + 1][j] + (a[i][j - 1] - a[i + 1][j - 1]);} else {a[i][j] = a[i + 1][j] + (a[i][j + 1] - a[i + 1][j + 1]);}cout << a[i][j] << '\n';return 0;}}}return 0;
}
题意:
思路:
x, y, z = input().split()
x = int(x); y = int(y)
tmp = 0
for i in z :if i >= '0' and i <= '9':tmp = tmp * x + int(i)elif i >= 'A' and i <= 'Z' :tmp = tmp * x + 10 + ord(i) - 65else :tmp = tmp * x + ord(i) + 36 - 97
res = ""
while tmp > 0 :tp = tmp % ytmp = tmp // yif (tp <= 9) : res = str(tp) + reselif (tp < 36) : res = chr(tp - 10 + 65) + reselse : res = chr(tp - 36 + 97) + res
if res == "" : print(0)
else : print(res)
题意:
思路:
#include
using namespace std;
#define int long long
const int N = 1000010;
int n, m, k;int tree[5][N];
int lazy[5][N];
void push_down(int id, int l, int r, int u) {int mid = (l + r) >> 1;tree[id][u << 1] += lazy[id][u];lazy[id][u << 1] += lazy[id][u];tree[id][u << 1 | 1] += lazy[id][u];lazy[id][u << 1 | 1] += lazy[id][u];lazy[id][u] = 0;
}
void update(int id , int l, int r, int u, int L, int R, int v) {if (l > R || r < L) return;if (l >= L && r <= R) {tree[id][u] += v;lazy[id][u] += v;return;}if (lazy[id][u]) {push_down(id, l, r, u);}int mid = (l + r) >> 1;update(id, l, mid, u << 1, L, R, v);update(id, mid + 1, r, u << 1 | 1, L, R, v);tree[id][u] = max(tree[id][u << 1], tree[id][u << 1 | 1]);
}
int query(int id, int l, int r, int u, int L, int R) {if (l > R || r < L) return 0;if (l >= L && r <= R) {return tree[id][u];}if (lazy[id][u]) {push_down(id, l ,r , u);}int mid = (l + r) >> 1;return max(query(id, l, mid, u << 1, L, R), query(id, mid + 1, r, u << 1 | 1, L, R));
}
void solved() {cin >> n >> m;for (int i = 1; i <= m; i ++ ) {string opr;int l, r;cin >>opr >> l >> r;if (opr == "MULTIPLY") {int x;cin >> x;while (x % 2 == 0) update(0, 1, n, 1, l, r, 1), x /= 2;while (x % 3 == 0) update(1, 1, n, 1, l, r, 1), x /= 3;while (x % 5 == 0) update(2, 1, n, 1, l, r, 1), x /= 5;while (x % 7 == 0) update(3, 1, n, 1, l, r, 1), x /= 7;} else {int maxn = 0;for (int i = 0; i <= 3; i ++ ) {maxn = max(maxn, query(i, 1, n, 1, l, r));}cout <<"ANSWER " << maxn << '\n';}}
}signed main() {int t = 1;ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);// cin >> t;for (int i = 1; i <= t; i ++ ) {solved();}
}
题意:
思路:
#include
using namespace std;
#define int long long
const int N = 1000010;
int n, m, k;
const int mod = 998244353;
int Qpow(int x, int k) {int res = 1;while (k) {if (k % 2) res = (res * x) % mod;x = (x * x) % mod;k >>= 1; } return res;
}
int get_presum(int x) {x = x % mod;int len = n % mod;int part1 = len % mod * (1 + x) % mod * x % mod * Qpow(2, mod - 2) % mod;int part2 = (2 * x % mod + 1) * (x + 1) % mod * x % mod * Qpow(6, mod - 2) % mod;int part3 = (1 + x) % mod * x % mod * Qpow(2, mod - 2) % mod;// cout << part1 << " " << part2 << ' ' << part3 << '\n';return (part1 - part2 + part3) % mod;
}
void solved() {cin >> n;int res = 0;for (int i = 2; i * i <= n; i ++ ) {int tmp = 1;int sum = 0;for (int j = i; j <= n; j *= i) {sum = (tmp * (min(n + 1, j * i) - j) % mod + sum) % mod;tmp ++;}res = (res + i * sum % mod) % mod;}int r = sqrt(n);res = (res + get_presum(n) - get_presum(r) + mod) % mod;cout << res << '\n';
}signed main() {int t = 1;ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);// cin >> t;for (int i = 1; i <= t; i ++ ) {solved();}
}
题意:
思路:
#include
using namespace std;
#define int long long
const int N = 1000010;
int n, m, k;
const int mod = 998244353;
pair pos[N];
int mrxa[1002][1992], mrxb[1002][1090];
int top[1010][1010];
int vis[N];
void solved() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {cin >> mrxa[i][j];vis[mrxa[i][j]] = (i - 1) * m + j;}}for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {cin >> mrxb[i][j];}}for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){mrxb[i][j] = vis[mrxb[i][j]];}}int maxn = 0;stack st;for (int i = 1; i <= n; i ++ ) {st.push(0);int last[1002];for (int i = 1; i <= m; i ++ ) last[i] = m + 1; for (int j = 1; j <= m; j ++ ) {if(mrxb[i-1][j]+m==mrxb[i][j]){top[i][j] = top[i-1][j]+1;}else{top[i][j] = 1;}if (mrxb[i][j - 1] + 1 != mrxb[i][j]) {while (st.top() != 0) {maxn = max(maxn, (j - last[st.top()]) * top[i][st.top()]);st.pop();}}last[j] = j;while (top[i][j] <= top[i][st.top()]) {maxn = max(maxn, (j - last[st.top()]) * top[i][st.top()]);last[j] = min(last[st.top()], last[j]);st.pop();}st.push(j);}while (st.top() != 0) {maxn = max(maxn, (m + 1 - last[st.top()]) * top[i][st.top()]);st.pop();}}cout << maxn << '\n';
}signed main() {int t = 1;ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);// cin >> t;for (int i = 1; i <= t; i ++ ) {solved();}
}