20201104大模拟(一)

开错题了我吐了,赛后A一发过,绝了

B是什么deng西,我得有一段时间不想看到植物大战僵尸了,有一些边界问题

C是在计算的过程中的大模拟

D是思维,

总体来说其实还好,不要怕的,就还好

“一道题WA了五发以上其实就没有出的必要了”

自己想想为什么会打成这个样子好不好


A - Try and Catch

A

题目真的有点长,还是要耐心阅读理解吧,

只有一个throw,刚开始以为有好多,并且觉得空格挺难搞的就先没做,其实没啥坑的直接冲就完事

#include <bits/stdc++.h>
using namespace std;struct node {int pos1;int pos2;string a;string b;
};stack<int> tryy;
vector<node> catchh; string throww = "";
int idx;bool cmp(node x, node y) {return x.pos1 < y.pos1;
}int main() {int n;cin >> n;getchar();for(int i = 1; i <= n; ++ i) {string s;getline(cin, s);int len = s.length();for(int j = 0; j < len; ++ j) {if(s[j] == ' ') continue;if(s[j] == 't') {if(s[j + 1] == 'r') { // trytryy.push(i);}else { // throwint k = j + 1;for(; k < len; ++ k) {if(s[k] == '(') break;}++ k;for(; k < len; ++ k) {if(s[k] != ' ') break;}for(; k < len; ++ k) {if(s[k] == ' ' || s[k] == ')') break;throww = throww + s[k];}idx = i;}break;}if(s[j] == 'c') { // catchstring aa = "";int k = j + 1;for(; k < len; ++ k) {if(s[k] == '(') break;}++ k;for(; k < len; ++ k) {if(s[k] != ' ') break;}for(; k < len; ++ k) {if(s[k] == ' ' || s[k] == ',') break;aa = aa + s[k];}string bb = "";for(; k < len; ++ k) {if(s[k] == '\"') break;}++ k;for(; k < len; ++ k) {if(s[k] == '\"') break;bb = bb + s[k];}//cout << i << " " << aa << " " << bb << endl;int pos1 = tryy.top();tryy.pop();catchh.push_back({pos1, i, aa, bb});break;}}}sort(catchh.begin(), catchh.end(), cmp);int siz = catchh.size();//    cout << "---- catchh :\n" ;
//  for(auto x : catchh) {//      cout << x.pos1 << " " << x.pos2 << " " << x.a << " " << x.b << endl;
//  }
//
//  cout << "\n\n";
//  cout << "idx :" << idx << endl;bool f = 0;for(int i = siz - 1; i >= 0; -- i) {if(f) break;node tmp = catchh[i];//cout << tmp.pos1 << " " << tmp.pos2 << endl;if(tmp.pos1 < idx && tmp.pos2 > idx) {//cout << throww << " " << tmp.a << endl; //cout << (tmp.a == throww) << endl;if(tmp.a == throww) {cout << tmp.b ;f = 1;break;}}}if(!f) {cout << "Unhandled Exception";}return 0;
}

B - I, zombie

植物大战僵尸,开错题目了,

一些边界问题

  • 第一个是土豆雷(这个赛时就想到了(比较后面才想到的
  • 有五十多个豌豆射手,或者说对于僵尸的血量可以是负的这件事的理解上面,是知道的,但是在处理过程中有个地方漏掉了,(

刚开始的思路是模拟每一段,每一段要么是MPPPPPPP 要么是MMMMM 就大概是两种,还有一些特殊情况比如PPPPP,但是其实可以归进去

对于每一段,他的左边有多少个豌豆,当前段要走几步什么的进行模拟(二分

但是关于僵尸血量可以是负的这件事,感觉可以换一种思路进行模拟,

还是要二分

最后一个位置是直接到达的,其他所有位置都要先走一步才能到达

MPMPMPMPMPMPMPM
12

60个豌豆还是处理错了

PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPMMMMMMMMMM
82

还是上面这个60个豌豆的样例,如果是前面全是P, 尸体可以骗土豆雷,但是去吃脑子的时候不能是尸体~~((?? 有点不确定了,~~(对的,但是不是这里的问题

这是第二次重码了,准备开始第三次

WA 也许哪天有心情可以改一改

#include <bits/stdc++.h>
using namespace std;const int maxn = 110;
int sum[maxn];bool judge(int leff, int p, int x, bool f) {if(x == 0) return 0;//if(p == 0) return 1;if(!f) {int z = x;int hp = 50;if(p) {for(int i = p; i > 0; -- i) {hp -= leff + i;if(hp <= 0) {z --;hp = 50;}if(z <= 0) return 0;int pea = 10;while(pea > 0) {pea -= z;hp -= leff + i;if(hp <= 0){z --;hp = 50;}if(z <= 0) return 0;}}  }else {if(x >= 2) return 1;else return 0;}}else {int z = x;int hp = 50;if(p) {int pea = 10;while(pea > 0) {pea -= z;hp -= leff + p;if(hp <= 0){z --;hp = 50;}if(z <= 0) return 0;}    }else {if(x) return 1;else return 0;}for(int i = p - 1; i > 0; -- i) {hp -= leff + i;if(hp <= 0) {z --;hp = 50;}if(z <= 0) return 0;int pea = 10;while(pea > 0) {pea -= z;hp -= leff + i;if(hp <= 0){z --;hp = 50;}if(z <= 0) return 0;}} }return 1;
}int main () {int T;cin >> T;int cas = 0;while(T --) {++ cas;printf("Case %d: ", cas);string s;cin >> s;int n = s.size();if(s[0] == 'P') sum[0] = 1;else sum[0] = 0;for(int i = 1; i < n; ++ i) {sum[i] = sum[i - 1] + (s[i] == 'P' ? 1 : 0);}bool f = 1; int cntp = 0;int tot = 0;for(int i = n - 1; i >= 0; -- i) {if(s[i] == 'M') {cout << "--------- cntp :" << cntp << ' ' << f << endl;int l = 0, r = 200000, ans;while(l <= r) {int mid = (l + r) >> 1;if(judge(sum[i], cntp, mid, f)) {ans = mid;r = mid - 1;}else {l = mid + 1;}}cout << ans << endl; tot += ans;f = 0;cntp = 0;}else {cntp ++;}}//cout << tot << endl;//cout << cntp << endl;if(cntp > 0) {int l = 0, r = 200000, ans;while(l <= r) {int mid = (l + r) >> 1;if(judge(0, cntp, mid, f)) {ans = mid;r = mid - 1;}else {l = mid + 1; }}tot += ans;}if(s[0] == 'M') tot ++;cout << tot << endl;}
}

我要按网上思路来le,,可恶 十一点了

0:17 按网上别人的代码流程来的,没啥意思说实话,不过这样写不容易出错,大体思路是一样的,

#include <bits/stdc++.h>
using namespace std;int step;bool judge(int pnum, int cnt, int znum) {int st = step;int php = 10, zhp = 50;while(cnt > 0 && znum > 0) {if(st > 0) {st --;zhp -= pnum;}else {php -= znum;zhp -= pnum;}if(php <= 0) {php = 10;pnum --; cnt --;st = 1;}if(zhp <= 0) {zhp = 50;znum --;}}if(cnt <= 0 && znum > 0) return 1;else return 0;
}int getRes(int pnum, int cnt) {int l = 1, r = 200000, ans;while(l <= r) {int mid = (l + r) >> 1;if(judge(pnum, cnt, mid)) {ans = mid;r = mid - 1;}else {l = mid + 1;}}return ans;
}int main() {int T;cin >> T;int cas = 0;while(T --) {++ cas;printf("Case %d: ", cas);string s;cin >> s;int n = s.size();int pnum = 0;int mnum = 0;for(int i = 0; i < n; ++ i) {if(s[i] == 'P') pnum ++;else mnum ++;}int ans = 0; -- n;if(s[n] == 'M') {ans ++;-- n;step = 2;}else step = 1;while(n >= 0) {if(s[n] == 'M') {if(step > 1) {step --;if(pnum >= 50) ans ++;continue;}-- n;mnum --;ans ++;step = 2;} else {int cnt =  0;for(int i = n; n >= 0; -- i) {if(s[i] == 'P') cnt ++;else break;}int res = getRes(pnum, cnt);//cout << pnum << " " << cnt << " " << res << endl;pnum -= cnt;ans += res;n -= cnt + 1;step = 2; }}if(s[0] == 'M') ans ++;cout << ans << endl;} return 0;
}

C - Broken Watch

刚开始没有题面(),其实不是很难的,

小数据手模找一下规律分奇偶推出两个公式

有个对2642 ^ {64}264的取模,unsigned long long 的自然溢出

然后有个除法,刚开始直接除然后wa了,后来考虑到有取模问题就需要用到逆元啥的,码了一个扩展欧几里得,但是发现2642^{64}264其实取不到啊,ull是264−12 ^ {64} - 1264−1

于是只能在做的过程中先除掉,分类分死我了

#include <bits/stdc++.h>
using namespace std;typedef unsigned long long ull;//ull mod;
//
//ull exgcd(ull a, ull b, ull & x, ull & y) {//  if(b == 0) {//      x = 1, y = 0;
//      return a;
//  }
//
//  ull d = exgcd(b, a % b, y, x);
//
//  y -= (a / b) * x;
//
//  return d;
//}int main() {ull a, b, c, n;cin >> a >> b >> c >> n;int cnt = 1;if(a == b && a == c) {cnt = 3;}else if(a == b || a == c || b == c){cnt = 2;}ull ans;if(n <= 2) {cout << 0 ;return 0;}if(n & 1) {if(cnt == 1)ans = n * (1ull + (n / 2)) * (n / 2) ;else if(cnt == 2) {if(!((n / 2) & 1)) {ans = n * (1ull + (n / 2)) * (n / 4);}else {ans = n * ((1ull + (n / 2)) / 2) * (n / 2);}}else if (cnt == 3) {if(!((n / 2) & 1)) {if(n % 3 == 0)ans = (n / 3) * (1ull + (n / 2)) * (n / 4);else if((1ull + (n / 2)) % 3 == 0){ans = n * ((1ull + (n / 2)) / 3) * (n / 4);}else if((n / 4) % 3 == 0){ans = n * (1ull + (n / 2)) * (n / 12);}}else {//ans = n * ((1ull + (n / 2)) / 2) * (n / 2)if(n % 3 == 0)ans = (n / 3) * ((1ull + (n / 2)) / 2) * (n / 2);else if((1ull + (n / 2)) % 3 == 0){ans = n * ((1ull + (n / 2)) / 6) * (n / 2);}else if((n / 4) % 3 == 0){ans = n * ((1ull + (n / 2)) / 2) * (n / 6);}}}}else {if(cnt == 1)ans = n * ((2ull + (n / 2)) * (n / 2 - 1)+ (n - 2));else if(cnt == 2) {if(!(n & 1)) {ans = (n / 2) * ((2ull + (n / 2)) * (n / 2 - 1)+ (n - 2));}else {ans = n * (((2ull + (n / 2)) * (n / 2 - 1) + (n - 2)) / 2);}}else if(cnt == 3) {if(!(n & 1)) {if((n / 2) % 3 == 0)ans = (n / 6) * ((2ull + (n / 2)) * (n / 2 - 1)+ (n - 2));elseans = (n / 2) * (((2ull + (n / 2)) * (n / 2 - 1)+ (n - 2)) / 3);}else {if(n % 3 == 0)ans = (n / 3) * (((2ull + (n / 2)) * (n / 2 - 1) + (n - 2)) / 2);elseans = n * ((((2ull + (n / 2)) * (n / 2 - 1) + (n - 2)) / 2) / 3);}}}cout << ans;return 0;
}

D - A Simple Stone Game

思维,其实感觉不是大模拟

在为什么要分解质因数这里刚开始脑子de牢想了一会

还好

#include <bits/stdC++.h>
using namespace std;typedef long long ll;const int maxn = 1e5 + 10;
ll a[maxn];
vector<ll> nums;
int n;ll getRes(ll x) {nums.clear();ll sum = 0;for(int i = 0; i < n; ++ i) {if(a[i] % x == 0) continue;ll num = a[i] % x;nums.push_back(num);sum += num;}sort(nums.begin(), nums.end());int siz = nums.size();ll res = 0;for(int i = siz - 1; i >= 0; -- i) {ll tmp = nums[i];res += x - tmp;sum -= x;if(sum <= 0) break;}return res;
}int main() {int T;cin >> T;while(T --) {//int n;cin >> n;ll sum = 0;ll mx = 0;for(int i = 0; i < n; ++ i) {cin >> a[i];sum += a[i];mx = max(mx, a[i]);}ll ans = sum - mx;//cout << sum << " " << mx << endl;for(ll i = 2; i <= sum / i; ++ i) {         if(sum % i == 0) {//cout << "i :" << i << endl;ll res = getRes(i);//cout << "----" << i << " " << res << endl;ans = min(ans, res);while(sum % i == 0) sum /= i;}}if(sum > 1) {ll res = getRes(sum);//cout << "----" << sum << " " << res << endl;ans = min(ans, res); }cout << ans << endl;}return 0;
}

20201104大模拟(一)相关推荐

  1. 1014 Waiting in Line (30 分) 【未完成】【难度: 难 / 知识点: 大模拟】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805498207911936 大模拟代码有时间补

  2. ZOJ 3879(大模拟)

    传送门 题面:Capture the Flag Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In comp ...

  3. ccf 202012-3 带配额的文件系统(大模拟)

    题外: 啊这,大半年没来csdn了,都长草了.回来练练机试内容吧,现在敲个模拟题,磕磕绊绊的..但是这大模拟恶心也是真恶心... 思路: 开始的时候跑偏了,本来是用的邻接表直接建边,但是问题是不在同一 ...

  4. “景驰科技杯”2018年华南理工大学程序设计竞赛 C Youhane's Undergraduate Thesis (大模拟)

    链接:https://www.nowcoder.com/acm/contest/94/C 大家都知道想从华南理工大学的本科毕业并不是一件简单的事情,作为一名大四即将毕业的学生,优酱正在为她的毕业论文愁 ...

  5. [BZOJ2548][Ctsc2002]灭鼠行动(大模拟)

    题目描述 传送门 题解 又是一道大模拟... 需要注意的几个地方: 1.一个时刻x+时间单位x~y操作的顺序是:时刻x老鼠繁殖.时刻x放武器.判断是否发生鼠疫.时间单位x~y老鼠移动. 2.只有某一个 ...

  6. 【第一届INT杯】 INT lpy的火柴游戏(大模拟)

    题目链接:https://www.coder.ac.cn/problem/INT1005 题解:这里就不多说了,也没有答案,没有数据.下午想了挺久的,总还是有一点收获的. 总结收获: 1.大模拟轻易别 ...

  7. [BZOJ1033][ZJOI2008]杀蚂蚁antbuster(大模拟)

    题目描述 传送门 题解 bz的题面真心不爽,建议去codevs 比较良心的一道大模拟,题面写的比较清楚,也没有什么坑 几个需要注意的地方 1.对于每一只蚂蚁来说,年龄=秒数-1 2.选择方向的过程是: ...

  8. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  9. [luogu9141] [THUPC 2023 初赛] 乱西星上的空战 -大模拟 - 计算几何

    传送门:P9141 [THUPC 2023 初赛] 乱西星上的空战 大家好我又来了,这次带给大家的依然是THUPC的传统艺能大模拟~ 个人点评:这题是我个人写完并通过的算法竞赛中的大模拟题中最长的一道 ...

最新文章

  1. python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图
  2. 2020人工神经网络第一次作业-参考答案第六部分
  3. HR 问“你目前有几个 Offer”,聪明人会怎么说?你呢!
  4. CentOS7中安装图形界面
  5. 利用逆矩阵解线性方程组_机器人学导论---第四章 操作臂逆运动学(一)4.1-4.11...
  6. Python学习笔记-基本语法
  7. Python将csv格式转换为xlsx
  8. Hbase预分区入门
  9. 【POJ1101OpenJudge2802】The Game 小游戏(BFS+记忆化)
  10. win7更新_WIN7操作系统无法更新IE11的解决办法
  11. c++ 获取外网ip地址
  12. TVS瞬变抑制二极管选型表
  13. 软件版本 —— Alpha、Beta、RC版本的区别
  14. Python+MySQL+云服务器 定时爬取B站日榜与微博热搜榜信息并保存至数据库
  15. LDPC译码:和积译码算法(SPA)、最小和算法(MSA)、分层译码算法(LBP)、动态信息更新策略IDS(含RBP、NW-RBP、SVNF-RBP)的MATLAB实现
  16. leetcode406:const、、static
  17. CPU中虚拟地址、逻辑地址(有效地址)、线性地址、物理地址
  18. Tomcat启动报错 More than one fragment with the name [spring_web] was found. This is not legal with relat
  19. 赛迪智库:2017年智能技术将呈现八大发展趋势
  20. Unity插件调研_Gis_Map

热门文章

  1. word数据提取技巧:如何批量提取身份证出生日期
  2. UI设计都有哪些分类,UI设计岗位哪个更好
  3. 虫洞wormhole
  4. ZooKeeper Commands: The Four Letter Words
  5. Codeforces - Bombs
  6. Codeforces Global Round 7 E. Bombs(线段树)
  7. 计算机械产量定额,机械台班产量定额的计算方式
  8. html中 a链接的默认样式,超链接的默认样式
  9. linux drm 源码,Linux DRM那些事-内核代码
  10. 个人认为安卓开发前景