为欢几何

欢迎各位教练,老师,同学们来到西南科技大学第十八届校赛。在这短暂的五个小时,尽情享受AC , AK的快乐。

藏头诗的本意一般藏在每个诗句的首字,将它们按顺序连起来读会有意想不到的效果。

《水浒传》第六十一回中梁山好汉为了拉卢俊义入伙,“智多星”吴用和宋江便生出一段“吴用智取玉麒麟”的故事来,利用卢俊义正为躲避“血光之灾”的惶恐心理,口占四句卦歌:

芦花丛中一扁舟,

俊杰俄从此地游。

义士若能知此理,

反躬难逃可无忧。

暗藏“卢俊义反”四字,广为传播。结果,成了官府治罪的证据,终于把卢俊义“逼”上了梁山。

现给你一首有 nn 行的"诗" ,你能解读出它的本意吗?

#include <iostream>
using namespace std;int main() {string ans = "";int n;cin >> n;while (n -- ) {string s;cin >> s;ans += s[0];}cout << ans;
}

青山隐隐,败叶萧萧

远山起伏,黑魆魆地时隐时显;枯叶在秋风中飘落翻转。小c 不愿意看到校园里此番凄凉景象,决定动用他的魔法,让校园与身后的青山在秋季一样焕发生机!

我们把问题具象化:小c 面前的 nn 堆败叶堆排成一排,每一堆败叶堆有 a_ia
i

片败叶。如果小c 能够使得面前这一排败叶同时满足以下两个条件,那么小c 就可以发动魔法让这片青山,让这座校园焕发生机!

条件①:对任意 i∈[1,n)i∈[1,n) , a_i+a_{i+1}a
i

+a
i+1

是一个质数;条件②:对任意 i∈[1,n]i∈[1,n] , a_ia
i

是一个质数。

小c 可以对任意多堆的败叶堆,做任意多次任意操作 (也可以为 00 ):

操作①:令 a_i=a_i+2a
i

=a
i

+2 ;操作 ②:令 a_i=a_i-2a
i

=a
i

−2 。当然,你不可以令任何一堆败叶堆里败叶的数量为负数。

请问小c 能否让青山和校园焕发生机?

#include <iostream>
using namespace std;int main() {int _;cin >> _;while (_ -- ) {int n;cin >> n;int x;cin >> x;bool even = true;if (x & 1) even = false;bool ok = true;for (int i = 2; i <= n; ++ i) {cin >> x;if ((x & 1) && even == false) {ok = false;} else if ((x % 2 == 0) && even) {ok = false;}if (x % 2 == 0) even = true;else even = false;}if (ok) cout << "YES" << endl;else cout << "NO" << endl;}
}

几番烟雾,只有花难护

龙山的天气是醉人的温暖,恰好是樱花落尽的时季。散布着细沙的行人道上满是狼藉的粉色花片,有些便沾挂在平铺的碧草上。几树梨花还点缀着嫩白的残瓣。北面与西面小山上全罩着淡蓝色的衣校,小燕子来回在林中穿跳。在这里正是一年好景的残春,到处有媚丽的光景使人流连。

烟烟雾雾,云云霭霭。残春好景使人流连忘返,可是,在这伤春悲秋之时,即使柳树已经抽完了芽,青藤也换完了新枝,而鲜花已经不再盛开。明年的鲜花有,年年新花年年有,可是你曾今看到的那一朵,你永远无法挽留,即使深爱过,再也不会出现。

你引腕便要去挽,获得的只有眼角不受控落下的泪滴。你毅然步入梦中,映入眼帘的是一片开满着蓝色鸢尾花的田野。通过划分可以把这片田野化成无数块 ,第 ii 块的面积为 i^2i
2
个单位面积,第 nn 块的面积为 n^2n
2
个单位面积。每块蓝色鸢尾花田的排布以及面积如图所示:(红色数字 ii 代表蓝色鸢尾花田编号,即第几块)
已知购买第 ii 块蓝色鸢尾花田的一单位面积的价格 price_iprice
i

如下式所示:
price_i = \begin{cases} \frac{n}{i}+1, & n%i ≠ 0 \ \frac{n}{i} ,& n%i=0 \ \end{cases}price
i

={
i
n

+1,
i
n

,

n%i


=0
n%i=0

现请你计算将前 nn 片蓝色鸢尾花田全部购买下来所需要的价格。

题解 :

  • 1e9块田,不可能遍历相加
  • 发现一片连续的i可以使得ni\frac{n}{i}in​为同一个值;设左边界为l,可以得到r等于min(n / n / l, n),这样,在枚举n块田的时候就可以跳着枚举了;面积计算也有技巧,每次要算的面积是l2+(l+1)2+...+r2l^2+(l+1)^2+...+r^2l2+(l+1)2+...+r2,联想到平方和公式n∗(n+1)∗(2n+1)6\frac{n*(n+1)*(2n+1)}{6}6n∗(n+1)∗(2n+1)​,可以将此转化为(12+...+r2)−(12+..+(l−1)2)(1^2+...+r^2)-(1^2+..+(l-1)^2)(12+...+r2)−(12+..+(l−1)2)
  • 观察公式,发现在枚举到是n的约数时要少加一个与约数有关的量,因此可以先不管直接当作非约数处理,另外开一个循环减去(枚举约数的技巧)
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod = 998244353;ll qmi(ll a, ll b) {ll res = 1;while (b) {if (b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}
ll f(ll n) {if (n == 0) return 0;return (n * (n + 1) % mod * (2 * n % mod + 1) % mod * qmi(6, mod - 2) % mod + mod) % mod;
}
ll calc(ll l, ll r) {return ((f(r) - f(l - 1)) % mod + mod) % mod;
}int main() {int _;cin >> _;while (_ -- ) {ll n;cin >> n;ll ans = 0;for (ll l = 1; l <= n;) {ll r = min(n / (n / l), n);ans = ((ans + calc(l, r) * (n / l + 1) % mod) % mod + mod) % mod;l = r + 1;}for (ll d = 1; d <= n / d; ++ d) {if (n % d == 0) {ans = ((ans - d * d % mod) % mod + mod) % mod;ll x = n / d;if (x != d) {ans = ((ans - x * x % mod) % mod + mod) % mod;}}}cout << ans << '\n';}
}

岸风翻夕浪,舟雪洒寒灯

如题名称所示,湖岸的风翻起晚浪,舟外的雪飘落灯前。看似写景,实则暗喻实事。杜甫用拟人的手法将浪大和风急的关系揭示出来,并以风来比喻小人猖狂,浪来比喻局势动荡,小人猖狂导致局势动荡。

现有无数重的"浪",我们用 S_xS
x

描述第 xx 重"浪"的波形,"浪"满足以下性质:

S_1=1S
1

=1

S_n = S_{n-1}+n+S_{n-1}S
n

=S
n−1

+n+S
n−1

( ‘++’ 表示连接)

例如:S_2=1\ 2\ 1S
2

=1 2 1,S_3=1\ 2\ 1\ 3\ 1\ 2\ 1S
3

=1 2 1 3 1 2 1, S_4=1\ 2\ 1\ 3\ 1\ 2\ 1\ 4\ 1\ 2\ 1\ 3\ 1\ 2\ 1S
4

=1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 …
由上述样例波形图和文字解释,可以发现第 33 重"浪"的第 33 位上的"浪高"是 11 ,第 44 重"浪"的第 1010 位上的"浪高"是 22 。

在此基础上推广一下,请你求出第 10{10{10^{10}}}10
10
10
10

重"浪"的第 KK 位上的"浪高"是多少?

题解 :

  • 递归,找到上一个循环结中k对应的位置
  • 首先找到比k小于等于的那个循环结;根据模拟题意,如果k恰好是那个循环结的最后一个位置,k位置上的数就是log2a+1log_2a+1log2​a+1;否则,找上次循环中相同的位置
#include <iostream>
using namespace std;
typedef long long ll;ll dfs(ll k) {ll a = 1;while (a <= k) {a <<= 1;}a >>= 1;if (a == k) {ll cnt = 0;while (a) {cnt ++ ;a >>= 1;}return cnt;}return dfs(a - (k - a));
}int main() {ll k;cin >> k;cout << dfs(k);
}

满城烟水月微茫,人倚兰舟唱

细水引流觞,大江观气浪。万顷风波里,一点轻舟上。

水无澜似镜,月傍云如玦。

可惜即无岸边凌波翩婉,也无舟中杯盘狼藉。此处呆坐未免无趣了些。

于是,小华和小明想起了他们在小卖部买的扑克牌。

小华和小明在用纸牌玩一个叫做比大小的游戏。

他们面前有 nn 堆纸牌,总共 mm 张,每堆纸牌分别有 a_ia
i

张,每张纸牌上都写有一个数字 x_{i,j}x
i,j

。每一轮游戏中,他们都会从有牌且编号最小的牌堆顶部抽一张牌比较数字的大小,谁的牌数字大谁这轮就赢了,赢家会获得 11 分。比较结束后,他们手上的牌都会被扔掉。如果任何一方没有牌可抽,整局游戏就结束了。小华先手。

小明是个坏家伙,他偷看到了小华的牌。如果他发现此时自己手上的牌没有严格大于小华,他会试图把自己手上的牌插入下一堆牌的底部,然后从面前的牌堆顶部重新抽一张。下一堆牌是指当前已经正在抽牌的牌堆编号加 11 的牌堆。特殊的,如果此时正在抽的已经是最后一个牌堆,那么这张牌将会被扔掉。在牌有剩余的情况下会一直循环这个过程。

小明想知道,整场游戏结束后,他的得分比小华多多少?
题解 :

  • 模拟
  • 每次取完数后,记得判断是否为空
#include <iostream>
#include <queue>
using namespace std;
const int N = 110;int n, m;
int a[N];
queue<int> que[N];int main() {cin >> n >> m;for (int i = 1; i <= n; ++ i) {cin >> a[i];for (int j = 1; j <= a[i]; ++ j) {int x;cin >> x;que[i].push(x);}}int now = 1, ans = 0, hua;while (now <= n) {hua = que[now].front();que[now].pop();if (que[now].empty()) now ++ ;while (now <= n && que[now].front() <= hua) {if (now < n) que[now + 1].push(que[now].front());que[now].pop();if (que[now].empty()) now ++ ;}if (now > n) {break;} else {ans ++ ;que[now].pop();if (que[now].empty()) now ++ ;}}cout << ans;
}

夜暗方显万颗星,灯明始见一缕尘

人不该太清醒,过去的事情就让它过去,不必反复咀嚼。一生不长,重要的事儿也没那么多。天亮了,又赚了。自认为迷惑的时候,往往才能看清方向与人生美好的可贵与价值意义。

顺应生活之路,无论走向哪种极端,我们都会在不一样的处境找到不一定的答案,从而不断平衡自己。我们需要这样一种能力,也需要去选择认同。自认为不错的时候,往往可以瞥见我们人生生活上本来存在的不足。

浩瀚星辰,万里银河;红烛微尘,夜临灯始。我们把这个夜空看做一个二维平面,则以某一点为原点建立一个笛卡尔坐标系。坐标系内有以下物体:“星”、“尘”、“灯”。

①:"星"是一个 n×mn×m 的矩形区域,它能够发出光芒。其左下角顶点坐标为 (0,0)(0,0) ,右上角顶点坐标为 (n,m)(n,m) 。

②:"尘"是一个 x×yx×y 的矩形区域,它可以也必须完全放置在"星"的表面之上,遮蔽"星"所发出的光芒。保证"尘"至少有一种完全放置在"星"的范围内的方法。

③:"灯"是"尘"遮蔽了"星"之后,"星"剩下的部分 (剩余部分通常是 “LL” 型或 “一字” 型) 。

"灯"中的每一个矩形都能为"灯"提供 11 点能量。给定"星"的位置和"尘"的大小,请制订一个放置"尘"的方案,使得"灯"能提供的总能量最多,求出这个最多的总能量数。("尘"必须完全放置在"星"的范围内,即:“尘” ∪∪ “星” == “星” 且 “尘” ∩∩ “星” == “尘” )

题解 :

  • 每一个矩形都能提供1个能量,说明这是一种累加式的贡献,想到由最小的单位开始增大到当前需要计算的面积的累加过程,比如一个1 * 2的矩形的贡献,是由1 * 1的矩形加上单纯的1 * 2矩形的贡献所构成的
  • 这里L型的面积不能由两个矩形相加,必须是两个矩形相加再减去一个矩形,因为被减去的那个交叉部分的矩形对另外两个矩形都有贡献,不能只算在一个矩形中,应该减去的是它本身单纯的贡献
#include <iostream>
using namespace std;
typedef long long ll;ll f(ll x, ll y) {ll ans = 0;for (ll i = 1; i <= x; ++ i) {for (ll j = 1; j <= y; ++ j) {ans += i * j;}}return ans;
}int main() {ll n, m, x, y;cin >> n >> m >> x >> y;ll ans1 = f(m, n - x) + f(n, m - y) - f(n - x, m - y);ll ans2 = f(m, n - y) + f(n, m - x) - f(n - y, m - x);cout << max(ans1, ans2);
}

劝君终日酩酊醉,酒不到刘伶坟上土

明净的琉璃杯中,斟满琥珀色的美酒,淅淅沥沥槽床滴,浓红恰似火齐珠,煮龙肝,爆凤髓,油脂白,点点又似泪珠涌,锦乡帷帘挂厅堂,春意呵浓浓,笛声悠扬如龙吟,敲起皮鼓响咚咚,吴娃楚女,轻歌软舞,其乐也融融,何况春光渐老日将暮,桃花如雨,飘落满地红,劝世人,不如终日醉呵呵,一日归黄土,纵是酒仙如刘怜,望一杯,也只是,痴人说梦。

小c 很嗜酒,但是小c 的酒已经喝完了,于是他向酒神祈求一些酒,酒神同意了这个请求。但是酒神有个前提:酒分配的多少由一个游戏来决定,小c 必须精准计算出他每次游戏可以获得多少酒,才能真正获得所有的酒。

游戏规则如下:

每次游戏在一个 n×mn×m 的酒桌上进行,酒桌上每一个格子里都有一坛酒,显然,一共有 n×mn×m 坛酒。

小c 可以行动 kk 次,每次行动有两种选择:

①:拿走某一行上剩余的所有酒。

②:拿走某一列上剩余的所有酒。

为了防止小c 作弊,酒神规定:行动①和行动②必须交替执行,不可以连续执行。

为了让小c 酩酊大醉,现在请你帮助小c 计算,游戏行动结束后,他最多可以获得多少坛酒。

题解 :

  • 整体趋势是行列各一半
  • 如果可以操作奇数次,就是多的那种多一次,k/2的向上取整(k+1)/2
  • 注意操作本身要受“有多少”的限制!!不过,不需要再考虑另一种操作用完了的情况,因为本身就是对半分考虑的,最多一个比另一个多一次
#include <iostream>
using namespace std;
typedef long long ll;ll n, m, k;int main() {int _;cin >> _;while (_ -- ) {cin >> n >> m >> k;if (m > n) swap(n, m);ll a = (k + 1) / 2;a = min(a, m);ll b = k - a;b = min(b, n);cout << a * n + b * m - a * b << endl;}
}

第十八届西南科技大学ACM程序设计竞赛(同步赛)相关推荐

  1. 第十八届西南科技大学ACM程序设计竞赛(同步赛)签到题 6题

    文章目录 B 为欢几何 F 青山隐隐,败叶萧萧 G 几番烟雾,只有花难护 H 岸风翻夕浪,舟雪洒寒灯 L 夜暗方显万颗星,灯明始见一缕尘 M 劝君终日酩酊醉,酒不到刘伶坟上土 B 为欢几何 链接:ht ...

  2. ICPC 山东省省赛刷题 第十八届西南科技大学ACM程序设计竞赛(同步赛)牛客 BFH题解

    B 为欢几何 题意:输入n个字符串,输出n个字符,分别是每个字符串的首字母. 分析:直接使用二维数组输入输出即可. 题解: #include<bits/stdc++.h> using na ...

  3. 第十八届西南科技大学ACM程序设计竞赛

    A-花非花 第一次用了manacher,不过不知道为啥还是tle了(57.4分不李姐) TLE代码  #include<bits/stdc++.h> #define ll long lon ...

  4. 牛客练习-哈尔滨理工大学21级新生程序设计竞赛(同步赛)

    比赛链接:哈尔滨理工大学21级新生程序设计竞赛(同步赛) 文章目录 前言 正文 A.考试周破防 B.咖啡店 C.kiki和bob玩取石子 D.猴王kiki分桃 E.很二的拆分 F.构造字符串 G.信号 ...

  5. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解

    "科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...

  6. “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】

    校赛~校赛~ Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Description SDUT 的校赛是从 20 ...

  7. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

    链接:https://ac.nowcoder.com/acm/contest/635/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(低年级)I 小乐乐切方块

    链接:https://ac.nowcoder.com/acm/contest/302/I 来源:牛客网 题目描述 小乐乐的作业本是2n*2n的方格本. 某天小乐乐的童鞋,想要考验一下小乐乐. 他将小乐 ...

  9. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解

    文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...

  10. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) F

    F 三角形 链接:https://ac.nowcoder.com/acm/contest/5758/F 来源:牛客网 小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数), 使 ...

最新文章

  1. 爱情也许是最忧伤的童话
  2. 你知道“淘宝意念购“吗?阿里巴巴也入局脑机接口领域了...,
  3. tomcat设置自动监听替换class文件
  4. c语言高中while题目,东风一中高中生智能机器人班c语言上机试题.doc
  5. 软件测试工程师-数据库
  6. VB 字符串MD5加密函数
  7. Go实战--二维码生成server
  8. codeforces 360B
  9. 多主机SSH密钥配置
  10. 什么软件可以搜C语言题答案,C语言题库(带答案)-排版Word版
  11. 淘宝/天猫收货地址列表 API和快递费用的 API解析
  12. zabbix mysql安装配置_Zabbix安装图解教程 | 系统运维
  13. python识别手写文字_深度学习---手写字体识别程序分析(python)
  14. php随机生成微信昵称(二)
  15. 2012年***名单。
  16. QuatusII--7段数码管
  17. 服务器集群环境下session的共享问题
  18. 【学习笔记】要学的东西
  19. jupyter 安装与配置代码提示功能
  20. 马云:无论被拒绝多少次,请相信自己

热门文章

  1. 生成9mb、10mb、20mb、30mb的星云图片,常用于图片测试
  2. 大数据数据挖掘与云计算-认识大数据
  3. 无人机飞行控制逻辑以及不稳定原因分析
  4. 外贸公司申请一个企业邮箱,国外邮箱大全对比
  5. ★RFC标准库_目录链接
  6. 阻止原生输入中文拼音途中会触发input方法的问题
  7. java中object是什么_Java中的Object是什么?
  8. C64+系列DSP的总结
  9. 关于进销存软件中的几种算法
  10. Chrome主页被恶意篡改