Wannafly Winter Camp Day8 (Div1, onsite) G 穗乃果的考试

2023-11-30 14:40

本文主要是介绍Wannafly Winter Camp Day8 (Div1, onsite) G 穗乃果的考试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

Catalog

文章目录

      • Catalog
        • Problem:传送门
      • Solution:
        • AC_Code:
        • Problem Description:

Problem:传送门

 Portal
 原题目描述在最下面。
 求 ∑ i 2 × f ( i ) \sum i^2\times f(i) i2×f(i)的值。

Solution:

在这里插入图片描述
做法2:把平方拆开暴力算每一项。感觉可以用前缀和的前缀和优化一下,应该也是 O ( n 2 ) O(n^2) O(n2)的。

做法1: a n s = ∑ i = 0 n m i ∗ i ∗ f ( i ) = ∑ i = 0 n m ( ∑ x y i s [ x ] [ y ] ∑ x y i s [ x ] [ y ] ) ∗ f ( i ) = ∑ x y i s [ x 1 ] [ y 1 ] ∑ x y i s [ x 2 ] [ y 2 ] ∑ 多 少 个 矩 形 包 含 ( x 1 , y 1 ) ( x 2 , y 2 ) ans=\sum_{i=0}^{nm}i*i*f(i)=\sum_{i=0}^{nm}(\sum_{xy}is[x][y]\sum_{xy}is[x][y])*f(i)=\sum_{xy}is[x1][y1]\sum_{xy}is[x2][y2]\sum_{多少个矩形包含(x1,y1)(x2,y2)} ans=i=0nmiif(i)=i=0nm(xyis[x][y]xyis[x][y])f(i)=xyis[x1][y1]xyis[x2][y2](x1,y1)(x2,y2)
然后就可以 O ( ( n m ) 2 ) O((nm)^2) O((nm)2)枚举任意两个为 1 1 1的点,然后算有多少个矩形包含这两个点,把结果累加起来就是答案了。
不过这题不需要 O ( ( n m ) 2 ) O((nm)^2) O((nm)2)枚举,你只需要枚举一个 1 1 1,另一个 1 1 1的贡献可以通过前缀和算出来。
我的方法比较麻烦,我是 O ( n m ) O(nm) O(nm)枚举 1 1 1,然后另一个 1 1 1的贡献分5个部分算出来:
在这里插入图片描述
紫色点是我当前枚举到的一个为 1 1 1的点 ( x , y ) (x,y) (x,y)。规定下面的点 ( i , j ) (i,j) (i,j)是为 1 1 1的点的坐标。
红色区域的贡献为: { ∑ i × j } × ( n − x + 1 ) × ( m − y + 1 ) \{ \sum i\times j\}\times(n-x+1)\times(m-y+1) {i×j}×(nx+1)×(my+1)
绿色区域的贡献为: { ∑ ( n − i + 1 ) × ( m − j + 1 ) } × x × y \{\sum(n-i+1)\times(m-j+1)\}\times x\times y {(ni+1)×(mj+1)}×x×y
蓝色区域的贡献为: { ∑ i × ( m − j + 1 ) } × ( n − x + 1 ) × y \{\sum i\times(m-j+1)\}\times(n-x+1)\times y {i×(mj+1)}×(nx+1)×y
黄色区域的贡献为: { ∑ ( n − i + 1 ) × j } × x × ( m − y + 1 ) \{\sum (n-i+1)\times j\}\times x\times(m-y+1) {(ni+1)×j}×x×(my+1)
紫色区域的贡献为: x × y × ( n − x + 1 ) × ( m − y + 1 ) x\times y\times(n-x+1)\times(m-y+1) x×y×(nx+1)×(my+1)

然后就这样暴力算,这题就没有了。

AC_Code:
#include<bits/stdc++.h>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long LL;
const int MXN = 2e3 + 7;
const LL mod = 998244353;
int n, m;
int ar[MXN][MXN];
LL sum[MXN][MXN], sum1[MXN][MXN], sum2[MXN][MXN], sum3[MXN][MXN],sum4[MXN][MXN];
LL up[MXN][MXN], Left[MXN][MXN], Right[MXN][MXN], down[MXN][MXN];
char s[MXN];
int main() {scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i) {scanf("%s", s+1);for(int j = 1; j <= m; ++j) ar[i][j] = s[j] - '0';}for(int i = 1; i <= n; ++i) {for(int j = 1, tmp; j <= m; ++j) {if(ar[i][j] == 0) tmp = 0;else tmp = i*j;sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+tmp;sum[i][j] = (sum[i][j]%mod+mod)%mod;}}for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) sum1[i][j] = sum[i-1][j-1];memset(sum, 0, sizeof(sum));for(int i = 1; i <= n; ++i) {for(int j = m, tmp; j >= 1; --j) {if(ar[i][j] == 0) tmp = 0;else tmp = i*(m-j+1);sum[i][j] = sum[i-1][j]+sum[i][j+1]-sum[i-1][j+1]+tmp;sum[i][j] = (sum[i][j]%mod+mod)%mod;}}for(int i = 1; i <= n; ++i) for(int j = m; j >= 1; --j) sum2[i][j] = sum[i-1][j+1];memset(sum, 0, sizeof(sum));for(int i = n; i >= 1; --i) {for(int j = 1, tmp; j <= m; ++j) {if(ar[i][j] == 0) tmp = 0;else tmp = (n-i+1)*j;sum[i][j] = sum[i+1][j]+sum[i][j-1]-sum[i+1][j-1]+tmp;sum[i][j] = (sum[i][j]%mod+mod)%mod;}}for(int i = n; i >= 1; --i) for(int j = 1; j <= m; ++j) sum3[i][j] = sum[i+1][j-1];memset(sum, 0, sizeof(sum));for(int i = n; i >= 1; --i) {for(int j = m, tmp; j >= 1; --j) {if(ar[i][j] == 0) tmp = 0;else tmp = (n-i+1)*(m-j+1);sum[i][j] = sum[i+1][j]+sum[i][j+1]-sum[i+1][j+1]+tmp;sum[i][j] = (sum[i][j]%mod+mod)%mod;}}for(int i = n; i >= 1; --i) for(int j = m; j >= 1; --j) sum4[i][j] = sum[i+1][j+1];for(int i = 2; i <= n; ++i) {for(int j = 1, tmp; j <= m; ++j) {if(ar[i-1][j] == 0) tmp = 0; else tmp = (i-1)*j;up[i][j] = up[i-1][j] + tmp;up[i][j] %= mod;}}for(int i = 1; i <= n; ++i) {for(int j = 2, tmp; j <= m; ++j) {if(ar[i][j-1] == 0) tmp = 0; else tmp = i*(j-1);Left[i][j] = Left[i][j-1] + tmp;Left[i][j] %= mod;}}for(int i = 1; i <= n; ++i) {for(int j = m - 1, tmp; j >= 1; --j) {if(ar[i][j+1] == 0) tmp = 0; else tmp = (n-i+1)*(m-j);Right[i][j] = Right[i][j+1] + tmp;Right[i][j] %= mod;}}for(int i = n-1; i >= 1; --i) {for(int j = 1, tmp; j <= m; ++j) {if(ar[i+1][j] == 0) tmp = 0; else tmp = (n-i)*(m-j+1);down[i][j] = down[i+1][j] + tmp;down[i][j] %= mod;}}LL ans = 0;for(LL i = 1; i <= n; ++i) {for(LL j = 1; j <= m; ++j) {if(ar[i][j] == 0) continue;ans = (ans + i*j%mod*(n-i+1)%mod*(m-j+1)%mod) % mod;ans = (ans + (sum1[i][j]+up[i][j]+Left[i][j])%mod*(n-i+1)%mod*(m-j+1)%mod)%mod;ans = (ans + (Right[i][j]+down[i][j]+sum4[i][j])%mod*i%mod*j%mod)%mod;ans = (ans + sum2[i][j]*(n-i+1)%mod*j%mod+sum3[i][j]*(m-j+1)%mod*i%mod)%mod;}}printf("%lld\n", (ans+mod)%mod);return 0;
}

Problem Description:

在这里插入图片描述

这篇关于Wannafly Winter Camp Day8 (Div1, onsite) G 穗乃果的考试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437422

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

软考(计算机技术与软件专业技术资格(水平)考试)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 月下飞天镜,云生结海楼。 ——《渡荆门送别》 信息系统项目管理师备考专栏 软考全称:计算机技术与软件专业技术资格(水平)考试 官网直达:中国计算机技术职业资格网 文章目录 软考介绍1.

2024年【防爆电气】考试题库及防爆电气复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 防爆电气考试题库根据新防爆电气考试大纲要求,安全生产模拟考试一点通将防爆电气模拟考试试题进行汇编,组成一套防爆电气全真模拟考试试题,学员可通过防爆电气复审模拟考试全真模拟,进行防爆电气自测。 1、【单选题】Exib级的本安设备可连接到()危险场所。(  C  ) A、0、1区 B、0、2区 C、1、2区 2、【单选题】充油型电气设备

【leetcode详解】考试的最大困扰度(滑动窗口典例)

实战总结: sum += answerKey[right] == c; 经典操作,将判断语句转化为0, 1接收来计数//大问题分解: 对'T'还是'F'做修改, 传参为c//滑动窗口: 遍历, 维护left& right指向 及 c的个数, 更新不知从何下手写代码时:考虑先写好第一次的,然后以此为基础补充代码以适后续情况 题面: 解题感受: 思路总体好想, 实现略有挑战。 思路分析:

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点:         第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分)。在历年考试中,案例题对该部分内容都有固定考查,综合知识选择题目中有固定分值的考查。本课时内容侧重于对知识点的记忆、理解和应用,按照以往的出题规律,嵌入式系统架构设计基础知识点基本来源于教材内。本课时知识架构如图19.1所示。 一、嵌入式系统发展历程

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (