目录

  • A、CF1398A Bad Triangle(模拟)
  • B、CF1398B Substring Removal Game(贪心)
  • C、CF1398C Good Subarrays(映射)
  • D、CF1398D Colored Rectangles(多维DP使用记忆搜索)

A、CF1398A Bad Triangle(模拟)


排个序就好了

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 500007;
int n, m, t;
PII a[N];int main()
{cin >> t;while(t -- ){scanf("%d", &n);for(int i = 1; i <= n; ++ i){scanf("%d", &a[i].x), a[i].y = i;}sort(a + 1,a + 1 + n);if(a[1].x + a[2].x > a[n].x){puts("-1");continue;}cout << a[1].y << " " << a[2].y << " " << a[n].y << endl;}return 0;
}

B、CF1398B Substring Removal Game(贪心)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 500007;
int n, m, t;
string s;
int ans[N];
int main()
{cin >> t;while(t -- ){cin >>s;memset(ans, 0, sizeof ans);int len = s.length();int cnt = 0, res1 = 0;for(int i = 0; i < len; ++ i){if(s[i] == '1'){ans[ ++ cnt] ++ ;while(s[ ++ i] == '1')ans[cnt] ++ ;}}sort(ans + 1, ans + 1 + cnt);for(int i = 1; i <= cnt; ++ i){if((i & 1) == (cnt & 1)) res1 += ans[i];}cout << res1 <<endl;}return 0;
}

C、CF1398C Good Subarrays(映射)


其区间内每个元素的和为区间长度, 也就是 区间和 = 区间长。
区间和可以用前缀和来维护,因此,可以得到:
sum[i]−sum[j−1]=i−j−1sum[i]−sum[j−1]=i−j−1sum[i]−sum[j−1]=i−j−1
移项,可以得到:
sum[i]−i=sum[j−1]−j−1sum[i]−i=sum[j−1]−j−1sum[i]−i=sum[j−1]−j−1
那么我们统计 sum[i]−isum[i]−isum[i]−i,如果出现重复的,那么 sum[i]−sum[j−1]=i−j−1sum[i]−sum[j−1]=i−j−1sum[i]−sum[j−1]=i−j−1 ,因此 sum[i]sum[i]sum[i] 可以与前面的所有项组合,答案加上前面的个数。

为了防止重复我们给每一个sum[i]−isum[i] - isum[i]−i都加上100000,这样映射到后面即可。

特别需要注意的是初始化,当 sum[i]−i=0sum[i]−i=0sum[i]−i=0 时,那么,[0,i][0,i][0,i] 区间和也就等于区间长度,因此 a[100000]=1a[100000]=1a[100000]=1。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>using namespace std;
typedef long long ll;
const int N = 1000007;
int n, m, t;
int sum[N];
int a[N];
string s;
int main(){scanf("%d", &t);while(t --){memset(sum, 0, sizeof sum);scanf("%d", &n);cin >> s;for(int i = 1; i <= n; ++ i){sum[i] = sum[i - 1] + s[i - 1] - '0';}ll ans = 0;memset(a, 0, sizeof a);a[100000] = 1;for(int i = 1;i <= n; ++ i){int x = sum[i] - i + 100000;ans += a[x];a[x] ++ ;}cout << ans << endl;}return 0;
}

D、CF1398D Colored Rectangles(多维DP使用记忆搜索)


数据范围只有200,所以我们可以用O(n3)O(n^3)O(n3)的暴力DP

闫氏DP分析法用着是真的爽

#include<cstdio>
#include<algorithm>
#include<iostream>using namespace std;const int N = 207;
int f[N][N][N];
int n, m;
int a[N], b[N], c[N];int dfs(int i, int j, int k){if(f[i][j][k])return f[i][j][k];if(i && j)f[i][j][k] = max(f[i][j][k], dfs(i - 1, j - 1, k) + a[i] * b[j]);if(i && k)f[i][j][k] = max(f[i][j][k], dfs(i - 1, j, k - 1) + a[i] * c[k]);if(j && k)f[i][j][k] = max(f[i][j][k], dfs(i, j - 1, k - 1) + b[j] * c[k]);return f[i][j][k];
}int R, G, B;int main(){scanf("%d%d%d", &R, & G, &B);for(int i = 1; i <= R; ++ i)scanf("%d", &a[i]);for(int i = 1; i <= G; ++ i)scanf("%d", &b[i]);for(int i = 1; i <= B; ++ i)scanf("%d", &c[i]);sort(a + 1, a + 1 + R);sort(b + 1, b + 1 + G);sort(c + 1, c + 1 + B);cout << dfs(R, G, B) << endl;return 0;
}

或者也可以写普通的DP,这里就需要ans在全局里寻找最大值,因为不一定是用完才最优。

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define mem(i, a) memset(i, a, sizeof(i))
#define sqr(x) ((x)*(x))
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
typedef long long ll;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 2e2 + 7;
using namespace std;
ll dp[maxn][maxn][maxn];
int arr[3][maxn];
int main(void){#ifdef ljxtt
freopen("data.in", "r", stdin);
#endifint num[3]; for(int i = 0; i < 3; i++) scanf("%d", &num[i]);for(int i = 0; i < 3; i++){for(int j = 0; j < num[i]; j++)scanf("%d", &arr[i][j]);sort(arr[i], arr[i] + num[i], greater<int> ());}ll ans = 0;for(int i = 0; i <= num[0]; i++)for(int j = 0; j <= num[1]; j++)for(int k = 0; k <= num[2]; k++){dp[i + 1][j + 1][k] = max(dp[i + 1][j + 1][k], dp[i][j][k] + 1ll * arr[0][i] * arr[1][j]);dp[i + 1][j][k + 1] = max(dp[i + 1][j][k + 1], dp[i][j][k] + 1ll * arr[0][i] * arr[2][k]);dp[i][j + 1][k + 1] = max(dp[i][j + 1][k + 1], dp[i][j][k] + 1ll * arr[1][j] * arr[2][k]);ans = max(ans, dp[i][j][k]);}printf("%lld\n", ans);return 0;
}

Educational Codeforces Round 93 (Rated for Div. 2) 题解相关推荐

  1. Educational Codeforces Round 117 (Rated for Div. 2)题解(A~D)

    Educational Codeforces Round 117 (Rated for Div. 2) 今天这场没打,赛后从九点半到十一点把前面四个题目给补了一下,E题明天有时间看看能不能弄出来. A ...

  2. Educational Codeforces Round 140 (Rated for Div. 2)题解

    看看时间还有十几分钟,开不出来题了,写个题解 A. Cut the Triangle 检查是不是直角边平行于坐标轴的直角三角形即可 这里可以用异或来写,代码较为简洁,我就不改了,直接贴上我的丑代码 c ...

  3. Educational Codeforces Round 133 (Rated for Div. 2) 题解 CD

    D: 这是一道好dp(对我来说) 我做的时候有想过正解那个方式当考虑到可能有重复就没有深入思考了 假设dp[i][j]代表第i次j的方案数 此时我们可以发现dp[i][j]=sum(dp[i-1][j ...

  4. Educational Codeforces Round 105 (Rated for Div. 2) 题解

    Educational Codeforces Round 105 (Rated for Div. 2) A. ABC String 枚举ABC分别为"( "和 " )&q ...

  5. Educational Codeforces Round 36 (Rated for Div. 2) 题解

    Educational Codeforces Round 36 (Rated for Div. 2) 题目的质量很不错(不看题解做不出来,笑 Codeforces 920C 题意 给定一个\(1\)到 ...

  6. Educational Codeforces Round 76 (Rated for Div. 2) 题解

    Educational Codeforces Round 76 题解 比赛链接 A. Two Rival Students #include<bits/stdc++.h> using na ...

  7. Educational Codeforces Round 93 (Rated for Div. 2)

    A - Bad Triangle 选出三个序列使之不能组成三角形.先把差距最大的选了,枚举中间值.两边之和不大于第三边. #define IO ios::sync_with_stdio(false); ...

  8. Educational Codeforces Round 93 (Rated for Div. 2) A. Bad Triangle 签到

    A. Bad Triangle time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  9. Educational Codeforces Round 107 (Rated for Div. 2) 题解

    文章目录 A. Review Site B. GCD Length C. Yet Another Card Deck D. Min Cost String E. Colorings and Domin ...

最新文章

  1. 组合特征(一)tfidf(word+article)
  2. pentaho中Invalid byte 3 of 3-byte UTF-8 sequence的解决方法
  3. 桶排序python实现
  4. Vue调用后端接口http ajax请求组件封装及proxyTable跨域问题解决超详细案例
  5. sqlnet.expire_time and idle_time
  6. 浅谈 MySQL 的存储引擎(表类型)
  7. 网页聊天室win10界面源码
  8. PaddlePaddle顶会论文复现 | ECO视频动作识别网络
  9. python格式化字符串漏洞_Python字符串格式化的方法(两种)
  10. 模型加速:WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks
  11. this.FileUpload1.PostedFile.File…
  12. php中文歌词,酷狗krc歌词解析并转换为lrc歌词php版
  13. 【f1c200s/f1c100s】全志f1c200s开发板设计(含原理图和PCB)
  14. 小米游戏本bios更新_小米游戏本 | 笔记本Air 13.3″ 四核 | 笔记本Air 12.5″ | 笔记本Pro 15.6″BIOS设置...
  15. Linux中的截图工具
  16. 喜讯|云畅科技上榜湖南省上市后备企业名单
  17. css 弹性盒子 flex布局
  18. sa-token使用
  19. 【ROS小车课设】虚拟机端编译riki工作空间问题解决
  20. 有什么性价比高的蓝牙耳机?2022三八节适合送礼的蓝牙耳机品牌推荐

热门文章

  1. 官方 | TensorFlow 2.0分布式训练教程
  2. 【学术相关】什么是核心期刊?国家级期刊、省级期刊、国际级期刊又是啥?...
  3. 2-Entity RANSAC:在变化的环境中进行稳健的视觉定位
  4. selenium 常用操作
  5. zabbix 清空历史表
  6. 查找谁在使用文件系统
  7. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转
  8. API和schema开发过程问题汇总
  9. PHP超时处理全面总结
  10. 移动分发端 基础统计指标经典业务代码节选--留存用户统计