20220819总结
这次考试太烂了,又没考过 Diavolo。
T1
简单的入门题,先热身。
#include<iostream>
#define int long long
#define N 5001
using namespace std;
int n, ans;
double a[N];
int t[N];
signed main(){
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i] >> t[i];
}
for (int i = 1; i <= n; i++){
while (t[i]){
int k = (double)a[i] * t[i];
ans ^= k;
t[i]--;
}
}
cout << ans;
return 0;
}
//kcr AK IOI orz
T2
对我来说是一道最难的题了,居然是个分组背包,虽然我也想到了,可是代码实现有问题。
#include<bits/stdc++.h>
#define int long long
#define N 2005
using namespace std;
inline int read(){register int x = 0, f = 1;register char c = getchar();while (c < '0' || c > '9'){if (c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9'){x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x * f;}
inline void write(int x){if (x < 0) putchar('-'), x = -x;if (x > 9) write(x / 10);putchar(x % 10 + '0');}
int n, m, k, tot;
int sum[N][N][2], dp[N][N][2], a[N][N];
bool c[N][N];
signed main(){
n = read(), m = read(), k = read();
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
char x;
a[i][j] = read();
scanf("%c", &x);
if (x == 'Y'){
c[i][j] = 1;
}else{
c[i][j] = 0;
}
}
getchar();
}
for (int i = 1; i <= m; i++){
int zd = 0;
for (int j = n; j > 0; j--){
if (c[j][i]){
sum[i][zd][1] += a[j][i];
}else{
zd++;
sum[i][zd][1] = sum[i][zd-1][1] + a[j][i];
sum[i][zd][0] = sum[i][zd-1][1] + a[j][i];
}
}
}
for (int i = 1; i <= m; i++){
for (int j = 0; j <= k; j++){
for (int l = 0; l <= min(n, j); l++){
dp[i][j][1] = max(dp[i][j][1], dp[i - 1][j - l][1] + sum[i][l][1]);
if (l){
dp[i][j][0] = max(dp[i][j][0], dp[i - 1][j - l][1] + sum[i][l][0]);
}
if (j > l){
dp[i][j][0] = max(dp[i][j][0], dp[i - 1][j - l][0] + sum[i][l][1]);
}
}
}
}
write(dp[m][k][0]);
return 0;
}
T3
有点简单,书上原题,看我暴打标程。
#include<iostream>
#include<stack>
#define int long long
#define N 1005
using namespace std;
int n, m, ans;
bool a[N][N];
int h[N];
int l[N], r[N];
stack<int> stk;
signed main(){
cin >> n >> m;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
char c;
cin >> c;
if (c == '*'){
a[i][j] = 0;
}else{
a[i][j] = 1;
}
}
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++){
if (!a[i][j]){
h[j] = 0;
}else{
h[j] = h[j] + 1;
}
}
for (int j = 1; j <= m; j++){
r[j] = m + 1;
}
for (int j = 1; j <= m; j++){
while (!stk.empty() && h[j] < h[stk.top()]){
r[stk.top()] = j;
stk.pop();
}
stk.push(j);
}
while (!stk.empty()){
stk.pop();
}
for (int j = 1; j <= m; j++){
l[j] = 0;
}
for (int j = m; j >= 1; j--){
while (!stk.empty() && h[j] <= h[stk.top()]){
l[stk.top()] = j;
stk.pop();
}
stk.push(j);
}
while (!stk.empty()){
stk.pop();
}
for (int j = 1; j <= m; j++){
ans += (j - l[j]) * (r[j] - j) * h[j];
}
}
cout << ans;
return 0;
}
//kcr AK IOI orz
T4
爽死了,做过,直接一波
#include<iostream>
#include<climits>
#include<queue>
#define int long long
#define N 10001
#define M 50001
#define INF LLONG_MAX
using namespace std;
int n, m, s, t, c;
int f[N];
struct edge{
int v, w, nxt;
}e[M << 1];
int head[N], cnt;
void add(int u, int v, int w){
cnt++;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
int dis[N];
struct node{
int s, d;
bool operator < (const node &x) const{
return x.d < d;
}
};
priority_queue<node> q;
bool dij(int x){
while (!q.empty()){
q.pop();
}
for (int i = 1; i <= n; i++){
dis[i] = INF;
}
dis[s] = 0;
q.push((node){s, 0});
if (f[s] > x){
return 0;
}
while (!q.empty()){
int u = q.top().s, d = q.top().d;
q.pop();
if (dis[u] != d){
continue;
}
for (int i = head[u]; i; i = e[i].nxt){
int v = e[i].v;
if (f[v] <= x && dis[u] + e[i].w < dis[v]){
dis[v] = dis[u] + e[i].w;
q.push((node){v, dis[v]});
}
}
}
return dis[t] <= c;
}
signed main(){
cin >> n >> m >> c;
s = 1, t = n;
int l = 0, r = 0;
for (int i = 1; i <= n; i++){
cin >> f[i];
r = max(r, f[i]);
}
for (int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
add(v, u, w);
}
while (l < r){
int mid = (l + r) >> 1;
if (dij(mid)){
r = mid;
}else{
l = mid + 1;
}
}
if (dij(l)){
cout << l;
}else{
cout << "AFK";
}
return 0;
}
//kcr AK IOI orz
总结
我 AK 了。
这次考试
惊喜
差点某人要请我吃饭。
本文作者:bryce_yyds
本文链接:https://www.cnblogs.com/bryceyyds/p/16603180.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步