A Aqours

题解:
https://www.cnblogs.com/qieqiemin/p/11251645.html

D:吉良吉影的奇妙计划 (暴力打表)

题目描述

吉良吉影是一个平凡的上班族,他决定在休假的闲暇时光里制定接下来2n2n天的指甲修剪计划。

首先,吉良吉影会在纸上写下2n2n个字(左、右各nn个),表示他每天是修剪左手的指甲还是右手的指甲。但是吉良吉影是一个称职的上班族,不会浪费这么多时间在修剪指甲上,于是他决定将一些位置改成空(即那天不剪指甲)。吉良吉影从头扫视整个计划,如果出现连续两天,剪的是不同的手,那么他就会将这两天改成空,并从头开始重复这个过程。直到不存在连续两天剪不同手的指甲为止。比如初始的计划为左左右左左右右右,那么在第一次修改后变成左空空左左右右右,在第二次修改后变成左空空左空空右右。由于吉良吉影的指甲生长的非常快,所以他不能容忍出现连续4天或以上的空,如果在最终的计划中出现了连续4个的空,那么他认为这样的计划不合法并炸掉计划。

现在吉良吉影想知道,他可能造出多少种合法的计划?两个计划被认为不同,当且仅当存在任意一天的选择不同。

输入描述

第一行包含一个整数n(1 \le n \le 20)n(1≤n≤20)。

输出描述

输出仅一行,表示合法计划的数量,对998244353998244353取模。

样例输入 1

3
样例输出 1

6

思路:
2*n=40,二进制暴力枚举显然是不可接受的,又因为对于每一个n,答案是固定的,那么我们直接dfs深搜,本地跑出1~20的所有答案。然后直接输出答案

要加剪枝优化才可以本地很快的跑出结果,但是不要交dfs的程序,会TLE,必须本地打表交。

下面贴上暴搜的程序。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int* p);
const int maxn = 1000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/ll ans=0ll;
const ll mod=998244353ll;
int a[maxn];
int n;
void dfs(int dep,int cnt0,int cnt1)
{if(dep==2*n+1){
//        rep(i,1,dep)
//        {
//            cout<<a[i]<<" ";
//        }
//        cout<<endl;ans++;ans%=mod;}else{if(cnt1){if(a[dep-1]!=0){a[dep]=1;dfs(dep+1,cnt0,cnt1-1);}}if(cnt0){if(a[dep-1]!=1){a[dep]=0;dfs(dep+1,cnt0-1,cnt1);}}if(cnt1&&cnt0&&(dep+1<=2*n)&&a[dep-1]!=-1){a[dep]=-1;a[dep+1]=-1;dfs(dep+2,cnt0-1,cnt1-1);}}
}
int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);a[0]=3;repd(i,1,20){ans=0ll;n=i;dfs(1,i,i);cout<<ans<<",";}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

G:穗乃果的考试 (公式)

题面:
题目描述

为了能在新学期获得 LoveLive! 的出场资格,\mu'sμ

s 的成员们必须所有考试都要及格才能继续活动。但高坂穗乃果的数学不太好,需要大家的帮助才能及格。

有一天,穗乃果碰到了一个这样的数学题,她不太会做,但是如果说自己不会做很可能会被希给予严厉的惩罚,所以她在 \mu'sμ

s 粉丝群中找到了学霸的你,希望能请你帮帮她。题目是这样的:

给定一个 n\times mn×m 的 01 矩阵,记 f_if
i

为恰有 ii 个 1 的子矩阵的个数,求:\sum_{i=0}^{nm}i \cdot f_i∑
i=0
nm

i⋅f
i

输出答案对 998244353 取模的结果。

输入描述

第一行两个正整数 n,m(1\le n,m \le 2000)n,m(1≤n,m≤2000),表示矩阵的大小。

接下来 nn 行,每行mm个为00或为11的字符。第ii行的第jj个字符代表矩阵的第ii行的第jj个元素的值。

输出描述

仅一行一个非负整数表示答案对 998244353 取模的结果。

样例输入 1

3 3
010
111
010
样例输出 1

64

思路:
在第i行第j列的1在i(n-i+1)j(m-j+1) 个子矩阵中,所以他就会对这么多个矩阵做贡献。nm扫一遍累加即可

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int* p);
const int maxn = 1000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
char a[2005][2005];
int n,m;
const ll mod=998244353ll;
int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);gbtb;cin>>n>>m;repd(i,1,n){repd(j,1,m){cin>>a[i][j];}}ll ans=0ll;repd(i,1,n){repd(j,1,m){if(a[i][j]=='1'){ans=(ans+(1ll*i*(n-i+1)*j*(m-j+1))%mod)%mod;// cout<<i<<" "<<j<<" "<<i*(n-i+1)*j*(m-j+1)<<endl;}}}cout<<ans<<endl;return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11241034.html

CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题相关推荐

  1. 2019 CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题记录

    一篇来自ACM入门者的补题记录 最近有点懒,想着还有最后一篇博客没完成,是我最大的补题动力. 不过终于在camp过去三个月的时候完成了所有的补题博客,有点欣慰,下一个目标应该是补一补一年前暑期训练的题 ...

  2. 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)(补题记录)

    一篇来自ACM入门者的补题记录 文章目录 A.机器人 B.吃豆豆 C.拆拆拆数 E.流流流动 F.爬爬爬山 I.起起落落 J.夺宝奇兵 A.机器人 题意:有两条平行线段A,B,长度从1~n,机器人一开 ...

  3. CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)

    题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...

  4. CCPC-Wannafly Winter Camp Day8 (Div2, onsite)

    Replay Dup4: 厕所是个换换脑子的好地方? 要读题啊,不要别人不做,自己就跟着不做啊 X: 读题很重要啊!什么时候才能读对题 不演队友啊 D题看错题, 直到最后一小时才看懂 很多时候要看榜单 ...

  5. CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 去音乐会

    题目链接 题目描述 在冬马曜子工作室的安排下,和纱会在维也纳休养a天,然后去日本开b-a天音乐会,并以b天为一周期不断循环.而根据Knight Records的工作安排,雪菜会去外地出差c天,然后休息 ...

  6. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  7. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) I 石头剪刀布(按秩合并并查集)

    题解:每次有两个事件: y y去挑战xx,如果赢了可以坐在x x的位置,打平或者输了就要被淘汰. 询问在进行所有一类事件后,有多少种情况可以让x x现在还没有被淘汰. 对于第二类事件,我们假设x x挑 ...

  8. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  9. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛

    F - 小清新数论 做法一:欧拉函数 #include<stdio.h> #include<bits/stdc++.h> using namespace std; #defin ...

最新文章

  1. Java8 - 接口默认方法
  2. python 列表多行_Python Pandas list列表数据列拆分成多行的方法实现
  3. mapper中的CDATA标签的用法
  4. xsd文件转图片_如何将图片转化为PDF格式?分享一个超简单的方法给你
  5. Google搜索正在“死亡”
  6. 电脑位数怎么看_看完了这篇文章你就知道怎么选电脑了...
  7. Transformer的学习
  8. android Fragment缓存问题
  9. 03. 二维数组中的查找(C++实现)
  10. [Python设计模式] 第13章 造小人——建造者模式
  11. 2021华为软件精英挑战赛(粤港澳赛区复赛第八)
  12. 易点易动助力叮咚买菜数字化管理固定资产和易耗品
  13. 树莓派硬件编程——(零)先导篇
  14. 实训(一)学生管理系统
  15. Android源码编译过程及刷机过程详解
  16. win10的word如何取消分页符
  17. ACM学习:例题完成总结与期中心得
  18. U-BOOT小全(二)
  19. 浙大计算机专业是不是图灵班,浙大图灵班录取条件
  20. java二维数奇数组金字塔_金字塔内神秘的数字~世界末日真的存在?

热门文章

  1. 将github pages搭建的网页添加到百度搜索资源平台
  2. SAP Netweaver ECATT介绍
  3. 如何修改微软powerpoint模板文字
  4. 一次SAP客户访谈记录
  5. 文秘专业计算机基础考题,《计算机应用基础》课程无纸化试题库建设及应用分析...
  6. 求圆面积的python代码_《求》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  7. 知道python网课答案_Python程序设计答案
  8. html5 js选择器,使用HTML5的JS选择器操作页面中的元素
  9. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理
  10. 获取不到时间_一月自考成绩查询时间一出,看了文章这次稳过