爆零记

  • 本来都忘了有这个比赛emmm
    然后下午其实也没时间写的样子,
    可是一直发短信提醒,,
    所以最后还是抽了小半个小时敲了两份模板
  • 但是,,大概是我菜把,
    两份都只能过样例。。。。
    而且也调试不出个所以然来
    包括拿到题解都觉得我思路没啥问题。。

T1、五子棋

  • 题意:给出一个五子棋盘,判断下一步能不能赢,下哪里能赢。
  • 根据棋子数量可以得知下一步谁下棋。然后枚举每个位置判断能否获胜即可。复杂度O(25*25*5)感觉挺稳的,可是不知道为啥只过了样例
//WA
#include<iostream>
#include<cstdio>
using namespace std;
char c[50][50];
int main(){int numo = 0, numx = 0;for(int i = 1; i <= 25; i++){for(int j = 1; j <= 25; j++){c[i][j] = getchar();if(c[i][j]=='o') numo++;if(c[i][j]=='x') numx++;}getchar();}//cout<<numo<<" "<<numx<<endl;char ch;if(numo==numx)ch = 'x';else ch = 'o';int ok = 1;for(int i = 1; i <= 25; i++){for(int j = 1; j <= 25; j++){int ii, jj, cnt;//shangjj = j, cnt = 1;while(c[i][--jj]==ch)cnt++;jj = j;while(c[i][++jj]==ch)cnt++;if(cnt>=5){cout<<i-1<<" "<<j-1<<"\n";ok = 0;}//zuoii = i, cnt = 1;while(c[--ii][j]==ch)cnt++;ii = i;while(c[++ii][j]==ch)cnt++;if(cnt>=5){cout<<i-1<<" "<<j-1<<"\n";ok = 0;}//zuoshangii = i, jj = j, cnt = 1;while(c[--ii][--jj]==ch)cnt++;ii = i, jj = j;while(c[++ii][++jj]==ch)cnt++;if(cnt>=5){cout<<i-1<<" "<<j-1<<"\n";ok = 0;}//youshangii = i, jj = j, cnt = 1;while(c[--ii][++jj]==ch)cnt++;ii = i, jj = j;while(c[++ii][--jj]==ch)cnt++;if(cnt>=5){cout<<i-1<<" "<<j-1<<"\n";ok = 0;}}}if(ok)cout<<"tie\n";return 0;
}
//AC
#include <bits/stdc++.h>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << "Line(" << __LINE__ << ") -> " << #x << " is " << x << endlusing namespace std;typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;const int INF = 1e9 + 7;char a[25][25], who;bool yes() {for(int i = 0; i <= 20; i++) {for(int j = 0; j < 25; j++) {bool ok = true;for(int k = 0; k < 5; k++)if(a[i+k][j]!=who) ok = false;if(ok) return true;}}for(int i = 0; i < 25; i++) {for(int j = 0; j <= 20; j++) {bool ok = true;for(int k = 0; k < 5; k++)if(a[i][j+k]!=who) ok = false;if(ok) return true;}}for(int i = 0; i <= 20; i++) {for(int j = 0; j <= 20; j++) {bool ok = true;for(int k = 0; k < 5; k++)if(a[i+k][j+k]!=who) ok = false;if(ok) return true;}}for(int i = 4; i < 25; i++) {for(int j = 0; j <= 20; j++) {bool ok = true;for(int k = 0; k < 5; k++)if(a[i-k][j+k]!=who) ok = false;if(ok) return true;}}return false;
}signed main()
{IO_OP;int cnt = 0;for(int i = 0; i < 25; i++)for(int j = 0; j < 25; j++) {cin >> a[i][j];if(a[i][j] != '.') cnt++;}who = 'x';if(cnt&1) who = 'o';bool y = 0;for(int i = 0; i < 25; i++) {for(int j = 0; j < 25; j++) {if(a[i][j] == '.') {a[i][j] = who;if(yes()) {cout << i << " " << j << endl;y = 1;}a[i][j] = '.'; }}}if(!y) cout << "tie" << endl;}

T2、染色(简单)

  • 题意:给出一个长为n的序列,以及m段区间。对序列的每个元素染色成黑或白分别可以获得bi和wi的美感,若某区间染成相同则可额外获得ci的美感,求美感最大。
  • 考虑没有区间的情况,直接扫一遍统计bi和wi单个元素最大即可。而加上区间则意味着有可能获得更高的美感,即当区间全染白+ci>区间染最大的时候,用后者更新即可。用前缀和维护可以O(1)求区间和,直接统计即可。整体复杂度是O(n)的,常数比较大,应该能过。
//WA
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 300050;
typedef long long LL;
int n, m, b[maxn], w[maxn], x[maxn];
LL sb[maxn], sw[maxn], sx[maxn];
int main(){cin>>n>>m;for(int i = 1; i <= n; i++){cin>>b[i];sb[i] = sb[i-1]+b[i];}for(int i = 1; i <= n; i++){cin>>w[i];x[i] = max(b[i],w[i]);sw[i] = sw[i-1]+w[i];sx[i] = sx[i-1]+x[i];}int ans = sx[n];for(int i = 1; i <= m; i++){int t, l, r, c;cin>>t>>l>>r>>c;if(t==1){int tmp = sb[r]-sb[l-1];if(tmp+c>sx[r]-sx[l-1]){ans = ans-(sx[r]-sx[l-1])+tmp+c;}}if(t==2){int tmp = sw[r]-sw[l-1];if(tmp+c>sx[r]-sx[l-1]){ans = ans-(sx[r]-sx[l-1])+tmp+c;}}}cout<<ans;return 0;
}
//AC
#include <bits/stdc++.h>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << "Line(" << __LINE__ << ") -> " << #x << " is " << x << endl
#define int llusing namespace std;typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;const int INF = 1e9 + 7, N = 3e5 + 7;int b[N], w[N], bsum[N], wsum[N], mx[N], sum[N], yes[N];signed main()
{IO_OP;int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) {cin >> b[i];bsum[i] = bsum[i - 1] + b[i];}for(int i = 1; i <= n; i++) {cin >> w[i];wsum[i] = wsum[i - 1] + w[i];}for(int i = 1; i <= n; i++) {mx[i] = max(b[i], w[i]);sum[i] = mx[i] + sum[i - 1];}int ans = 0;for(int i = 1; i <= m; i++) {int t, l, r, c;cin >> t >> l >> r >> c;for(int j = l; j <= r; j++) yes[j] = 1;int cur = sum[r] - sum[l-1];if(t == 1) {cur = max(cur, bsum[r] - bsum[l-1] + c);} else {cur = max(cur, wsum[r] - wsum[l-1] + c);}ans += cur;}for(int i = 1; i <= n; i++) if(!yes[i]) ans += mx[i];cout << ans << endl;}
//AC
#include <bits/stdc++.h>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << "Line(" << __LINE__ << ") -> " << #x << " is " << x << endl
#define int llusing namespace std;typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;const int INF = 1e9 + 7, N = 3e5 + 7;int b[N], w[N], bsum[N], wsum[N], mx[N], sum[N], yes[N];signed main()
{IO_OP;int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) {cin >> b[i];bsum[i] = bsum[i - 1] + b[i];}for(int i = 1; i <= n; i++) {cin >> w[i];wsum[i] = wsum[i - 1] + w[i];}for(int i = 1; i <= n; i++) {mx[i] = max(b[i], w[i]);sum[i] = mx[i] + sum[i - 1];}int ans = 0;for(int i = 1; i <= m; i++) {int t, l, r, c;cin >> t >> l >> r >> c;for(int j = l; j <= r; j++) yes[j] = 1;int cur = sum[r] - sum[l-1];if(t == 1) {cur = max(cur, bsum[r] - bsum[l-1] + c);} else {cur = max(cur, wsum[r] - wsum[l-1] + c);}ans += cur;}for(int i = 1; i <= n; i++) if(!yes[i]) ans += mx[i];cout << ans << endl;}

T3、染色(中等)

//T3
#include <bits/stdc++.h>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << "Line(" << __LINE__ << ") -> " << #x << " is " << x << endl
#define int llusing namespace std;typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;const int INF = 1e9 + 7, N = 3e5 + 7;int b[N], w[N], bsum[N], wsum[N], mx[N], sum[N], dp[N];
V<pi> bb[N], ww[N];int bmore[N], wmore[N];signed main()
{IO_OP;int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) {cin >> b[i];bsum[i] = bsum[i - 1] + b[i];}for(int i = 1; i <= n; i++) {cin >> w[i];wsum[i] = wsum[i - 1] + w[i];}for(int i = 1; i <= n; i++) {mx[i] = max(b[i], w[i]);sum[i] = mx[i] + sum[i - 1];}vi v;v.PB(1), v.PB(n+1);for(int i = 0; i < m; i++) {int t, l, r, c;cin >> t >> l >> r >> c;if(t == 1) {bb[r].EB(l, c);} else {ww[r].EB(l, c);}v.PB(l);v.PB(r+1);}sort(ALL(v));v.resize(unique(ALL(v))-v.begin());int nn = v.size() - 1;auto getmx = [&](int l, int r) {int lb = v[l], rb = v[r + 1] - 1;return sum[rb] - sum[lb-1];};auto getb = [&](int l, int r) {int lb = v[l], rb = v[r + 1] - 1;return bsum[rb] - bsum[lb-1];};auto getw = [&](int l, int r) {int lb = v[l], rb = v[r + 1] - 1;return wsum[rb] - wsum[lb-1];};for(int i = 0; i < nn; i++) {int r = v[i + 1] - 1;for(auto p:bb[r]) {// bbit.add(p.F, p.S);bmore[p.F] += p.S;}for(auto p:ww[r]) {// wbit.add(p.F, p.S);wmore[p.F] += p.S;}dp[i] = (i-1 < 0 ? 0 : dp[i-1]) + getmx(i, i);int more = 0;for(int j = i; j >= 0; j--) {more += bmore[v[j]];dp[i] = max(dp[i], (j-1 < 0 ? 0 : dp[j-1]) + getb(j, i) + more);}more = 0;for(int j = i; j >= 0; j--) {more += wmore[v[j]];dp[i] = max(dp[i], (j-1 < 0 ? 0 : dp[j-1]) + getw(j, i) + more);}}cout << dp[nn-1] << endl;}

2020 计蒜之道 预赛 第一场 爆零记相关推荐

  1. 2020 计蒜之道 预赛 第一场 A. 五子棋

    2020 计蒜之道 预赛 第一场 A. 五子棋 题目链接 计蒜之道程序设计大赛已经迎来了第六届,蒜头君很开心,决定带上好友们一起下一把 五子棋,并由自己来担任裁判.五子棋的规则为:双方分别使用黑白两色 ...

  2. 2017 计蒜之道 初赛 第一场 A题B题

    阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标系来描述棋盘: ...

  3. 2016 计蒜之道 初赛 第一场 青云的服务器密钥

    青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S1..SnS_1..S_nS​1​​..S​n​​,我们需要首先计算其对应的π\piπ 数组.对于任意的 ...

  4. 2016计蒜之道初赛第一场----A青云的服务器密钥【贪心】

    青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S_1..S_nS​1​​..S​n​​,我们需要首先计算其对应的 \piπ 数组.对于任意的 i(2 \l ...

  5. 2017 计蒜之道 初赛 第一场

    阿里的新游戏 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标 ...

  6. 计蒜之道初赛第一场-阿里的新游戏

    阿里的新游戏 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标 ...

  7. 2017 计蒜之道 初赛 第一场 A题(阿里的新游戏)

    阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋子.我们可以用坐标系来描述棋盘: ...

  8. 2017 计蒜之道 初赛 第一场 A、B题

    A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋 ...

  9. 2017 计蒜之道 初赛 第一场 阿里的新游戏(找规律,几何,模拟)

    题目: 34.5% 1000ms 131072K 阿里九游开放平台近日上架了一款新的益智类游戏--成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在 ...

最新文章

  1. 台湾证券交易开通运营现代化数据中心
  2. Android底层开发之Audio HAL Android Audio Overview
  3. Python3.5+selenium操作Chrome浏览器的简单实例
  4. 培训完java后想放弃_10个创意修补案例,改造后漂亮极了,看完让人想动手试试...
  5. 使用JavaScript实现页面选项自动添加行以及删除行 javaweb
  6. VC.NET 字节对齐设置
  7. AltiumDesigner中PCB如何添加 Logo
  8. 【Linux命令】nm 查看动态库和静态库中的符号
  9. linux jar 运行 停止,[转] Linux中启动和停止jar包的运行
  10. 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法
  11. layui的table常用方法
  12. [转载] Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结
  13. 为什么学习Markdown
  14. HAProxy从零开始到掌握
  15. 模块化的机器学习系统就够了吗?Bengio师生告诉你答案
  16. R 语言数据处理入门-2(缺失值处理)
  17. qq邮箱不能上传文件的修复
  18. java robust_Java的鲁棒性(Robust)
  19. 元真先生算命为什么很准
  20. tt作曲家简谱打谱软件_作曲家入门指南

热门文章

  1. 古谚、评论与论断、名篇与名言
  2. 强大的 function adapters
  3. 百家姓 —— 特别的姓氏与姓氏的由来
  4. 面向对象——意图与逻辑
  5. fire.php,php代码调试利器firephp安装与使用方法分析
  6. web和python前景_我想了解一下pythonweb和javaweb比较详细的学习成本和应用前景,谢谢!?...
  7. 『开源项目』基于STM32的智能垃圾桶之语音识别
  8. 树莓派百度语音识别+图灵机器人对话聊天机器人
  9. 什么是车联网?导航?听歌?智能语音识别?事实没这么简单!
  10. 计算机六级好考吗,计算机六级考什么?