\(T1\)

题目描述

给出一个 \(n × n\) 的, 元素为自然数的矩阵.

这个矩阵有许许多多个子矩阵, 定义它的所有子矩阵形成的集合为 \(S\) .

对于一个矩阵 \(k\) , 定义 \(f(k)\) 为 \(k\) 中所有元素的 \(AND\) 值 (按位与).

对于一个矩阵 \(k\) , 定义 \(g(k)\) 为 \(k\) 中所有元素的 \(OR\) 值 (按位或).

请求出所有子矩阵的 \(f(k)\) 之和与所有子矩阵的 \(g(k)\) 之和, 即 \(\prod_{k∈S}f(k)\) 与 \(\prod_{k∈S}g(k)\) .

由于答案可能很大, 只需要输出答案对 \(998244353\) 取模的结果.

\(Solution\)

期望得分-\(30pts\),结果错了三个地方:

\(1.\)文件输入输出把题目名字写错了...

\(2.\)把看成了异或...

\(3.\)递推的顺序错误,推前面的用到了后面还没推的

这种令人降智的错误犯一次就不可以第二次了啊。。。

\(100pts\)做法:

把每个数拆成二进制,第 \(k\) 位上的数对答案贡献为 \(2^k * ans\)

\(ans_{add}\) 可以看作全 \(1\) 的矩阵个数,\(ans_{or}\) 可看作所有矩阵减去全 \(0\) 矩阵个数

枚举每一列,用单调栈更新这一列的矩阵个数

时间复杂度:\(O(n^2)\),但是有个 \(31\) 的常数(二进制位数)

\(Code\)

#include<bits/stdc++.h>
#define ll long long
#define F(i, x, y) for(int i = x; i <= y; ++ i)
using namespace std;
int read();
const int mod = 998244353;
const int N = 1e3 + 5;
int n, top;
int ma[N][N], mb[N][N];
ll sta[N], pos[N], s[N], f[N][N][2];
ll ans, ans1, ans2;
int main()
{
freopen("mob.in","r",stdin);
freopen("mob.out","w",stdout);
n = read();
F(i, 1, n) F(j, 1, n) mb[i][j] = read();
F(k, 0, 31)
{
F(i, 1, n) F(j, 1, n) ma[i][j] = mb[i][j] & 1, mb[i][j] >>= 1;
F(i, 1, n) F(j, 1, n)
if(ma[i][j]) f[i][j][1] = f[i][j - 1][1] + 1, f[i][j][0] = 0;
else f[i][j][1] = 0, f[i][j][0] = f[i][j - 1][0] + 1;
ans = 0;
F(j, 1, n)
{
top = 0;
F(i, 1, n)
{
while(top && f[i][j][1] <= sta[top]) -- top;
sta[++ top] = f[i][j][1], pos[top] = i;
s[top] = (s[top - 1] + (i - pos[top - 1]) * f[i][j][1] % mod) % mod;
ans = (ans + s[top]) % mod;
}
}
ans1 = (ans1 + ans * (1 << k) % mod) % mod;
ans = 0;
F(j, 1, n)
{
top = 0;
F(i, 1, n)
{
while(top && f[i][j][0] <= sta[top]) -- top;
sta[++ top] = f[i][j][0], pos[top] = i;
s[top] = (s[top - 1] + (i - pos[top - 1]) * f[i][j][0] % mod) % mod;
ans = (ans + i * j % mod + mod - s[top]) % mod;
}
}
ans2 = (ans2 + ans * (1 << k) % mod) % mod;
//printf("%lld\n%lld", ans1, ans2);
}
printf("%lld\n%lld", ans1, ans2);
return 0;
}
int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}

\(T2\)

题目描述

有 \(n\) 个人想要加入圣战, 每个人需要选择一个阵营加入.

但他们私下有 \(m\) 对敌对关系, 有敌对关系的两个人不会加入同一个阵营.

很快, 他们发现这会让他们难以加入到圣战中, 于是有一对敌人和好了, 即去除了一对敌对关系.

请找出去除哪一对关系后, 能找到一种加入阵营的方案, 使得剩余有敌对关系的人都不在同一个阵营.

为了避免输出文件过大, 你只需要输出所有符合题意的关系编号的异或和.

\(Solution\)

期望得分-\(30pts\),错误:

\(1.\)要把 \(next\) 写作 \(nxt\) 之类,避免关键词

\(2.\) \(dfs\) 写错了

\(90pts\)做法:

根据观察分析可得出,拆去一条边后合法仅为剩下的图中无奇环

则做一个 \(dfs\) 找奇环,记录奇环数量 \(K\),最后枚举边,若边被奇环覆盖数 \(=\) \(K\),即合法

主要是在如何找奇环,我写的 \(dfs\) 少了一句关键的 \(vis[x] = 0\),就是在搜完这个点后要将它复原,不然会有奇环搜不到

至于为什么是 \(90pts\),emm有两个点一直不对,但是这个算法应该是没问题(题解和这个基本是一样的),还在搜索错误中

\(upd(4/11):\) 其实是对的,数据错了

\(Code\)

#include<bits/stdc++.h>
#define F(i, x, y) for(int i = x; i <= y; ++ i)
using namespace std;
int read();
const int N = 2e6 + 5;
int n, m, x, y;
int ans1, ans2, K;
int head[N], cnt = 1, ver[N << 1], nxt[N << 1];
int vis[N], dep[N], pre[N], kk[N];
void add(int x, int y)
{
ver[++ cnt] = y, nxt[cnt] = head[x], head[x] = cnt;
}
void dfs(int x, int ffa, int y)
{
if(vis[x] && (dep[ffa] - dep[x]) % 2 == 0)
{
++ K, ++ kk[y], ++ kk[y ^ 1];
while(ffa != x) ++ kk[pre[ffa]], ++ kk[pre[ffa] ^ 1], ffa = ver[pre[ffa] ^ 1];
return;
}
if(vis[x]) return;
dep[x] = dep[ffa] + 1, pre[x] = y, vis[x] = 1;
for(int i = head[x]; i; i = nxt[i])
if(ver[i] != ffa) dfs(ver[i], x, i);
vis[x] = 0;
}
int main()
{
freopen("crusade.in","r",stdin);
freopen("crusade.out","w",stdout);
n = read(), m = read();
F(i, 1, m) x = read(), y = read(), add(x, y), add(y, x);
F(i, 1, n) if(! vis[i]) dfs(i, 0, 0);
for(int i = 2; i <= cnt; i += 2) if(kk[i] == K) ++ ans1, ans2 ^= (i / 2);
printf("%d\n%d\n", ans1, ans2);
return 0;
}
int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}

\(T3\)

题目描述

有一个长度为 \(n\) 的正整数序列 \(a\) , 你需要进行 \(m\) 次操作, 每次操作有如下两种类型:

修改: \((L, R, x)\) , 表示将区间 \([L, R]\) 内的 \(ai\) 都乘上一个正整数 \(x\) .

询问: \((L, R)\) , 询问区间 \([L, R]\) 内每个数的乘积的欧拉函数值, 即 φ(∏Ri=Lai)

\(Solution\)

300以内只有62个质数,所以可以用 \(long \ long\) 类型的数记录包含的质数,用线段树维护

提前预处理好质数,逆元,一些欧拉函数相关

\(Code\)

调了两个多小时还是错的$kk$


总结

今天考试惨烈地暴零了,原因有以下几点:

\(1.\)菜,所以花时间想正解基本上等于浪费时间了

\(2.\)连续几次看错题,例如 \(t2\) 最开始看错题花了一个小时写错误的算法,\(t1\) 把或看作异或等,还是考试不够专注,没有全身心投入

\(3.\)破罐子破摔心理不可有,一旦开考就不要想有的没的,只要多拿分,不管情况是怎样,一定要尽可能拿更高得分

\(4.\)完整地搞定一道题(至少保证它能拿到想要的分数)后再去开下一道,今天就是 \(t1\) 暴力写完了,居然放在那里没调,打算把第三题写完一起调,最后都暴零了

【考试总结】欢乐模拟赛_Day1的更多相关文章

  1. 【考试总结】欢乐模拟赛_Day2

    \(T1\) 题目描述 在仙界中有着 \(n\) 位神仙, 每位神仙用一个 \(1 ∼ n\) 的特异编号表示, 老祖 \(ChitongZ\) 的编号为 \(1\) . 除去至尊至圣, 统管仙界的老 ...

  2. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  3. NOIP欢乐模拟赛 T3 解题报告

    3.小澳的葫芦 (calabash.cpp/c/pas) [题目描述] 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界 ...

  4. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...

  5. Test20171009 考试总结 NOIP模拟赛

    题目难度合适,区分度适中,但是本人水平不佳,没有拿到满意的分数. T1(matrix) 一种比较容易想到的想法是枚举起点求出最长全1串做预处理,这是O(n^2)的. 接着枚举列起点,列终点,通过后缀和 ...

  6. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  7. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  8. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  9. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

随机推荐

  1. 热点 | github近期热点项目汇总

    本文是近期Github热点项目的汇总,如果你想了解更多优秀的github项目,请关注我们公众号的github系列文章. 推荐 | 7个你最应该知道的机器学习相关github项目 热点 | 六月Gith ...

  2. Fedora20在神州战神K650D1安装过程,使用netinstall和Dvd.iso镜像安装。

    最近新买一笔记本,神州战神K650D-i5 D1.仍旧安装双系统,WIndows7+Fedora20.磁盘分区是这样的: 第一主分区 /boot ext4 20G 第二主分区 / ext4 70G 第 ...

  3. Ali_Cloud++:阿里云Centos配置iptables防火墙教程

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 1):检查iptab ...

  4. Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0

    以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来 ...

  5. python fabric 练习记录

    https://blog.csdn.net/freeking101/article/details/81103945   fabric 域名

  6. day 1 硬件组成概念及介绍笔记

    一.服务器的种类: 硬件服务器: 1.机架式服务器 2.刀片式服务器 3.塔式服务器 虚拟服务器: 阿里云 aws 腾讯云 二.详细硬件组成: 1.电源  ----心脏(供电) 冗余特性    ups ...

  7. 浅谈动态规划(Dynamic Programming)

    利用Leetcode#198打劫家舍 浅谈动态规划 Origin:https://leetcode-cn.com/problems/house-robber/ 题目本身不难,就是一个动态规划的问题.在 ...

  8. mpvue小程序开发

    查阅资料,看官方文档,知道mpvue是一个使用 Vue.js 开发小程序的前端框架(美团的开源项目).框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compi ...

  9. json的fromjson的方法使用。可以在volley中进行使用

    Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...

  10. MTK Android 设置下添加一级菜单[ZedielPcbTest]

    功能描述:Android7.1.2 设置下添加一级菜单[ZedielPcbTest],点击ZedielPcbTest,启动ZedielPcbTest.apk应用. 编译:需要在out目录删除Settt ...