T1

直接暴力可拿60pts,不开 long long 会挂5pts,时间复杂度

\(\mathcal O(n^{4})\) , 然而这过不了400的数据,至少也要 \(\mathcal O(n^{3})\),然后,考试的时候就想不出来了。

正解,枚举行,计算出模 \(k\) 意义下余数相同的矩阵的个数,统计答案即可。

Code
#include<cstdio>
#define MAX 1000001
#define re register
#define int long long
namespace OMA
{
int n,m,p,ans;
int sum[401][401];
int cnt[MAX],pre[401];
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
signed main()
{
n = read(),m = read(),p = read();
for(re int i=1; i<=n; i++)
{
for(re int j=1; j<=m; j++)
{ (sum[i][j] += sum[i-1][j]+sum[i][j-1]+read()-sum[i-1][j-1]+p) %= p; }
}
for(re int i=0; i<=n-1; i++)
{
for(re int j=i+1; j<=n; j++)
{
cnt[0] = 1;
for(re int k=1; k<=m; k++)
{ ans += cnt[(pre[k] = sum[j][k]-sum[i][k]+p) %= p]++; }
for(re int k=1; k<=m; k++)
{ cnt[pre[k]] = 0; }
}
}
printf("%lld\n",ans);
return 0;
}
}
signed main()
{ return OMA::main(); }

T2

\(k=0\) 时,直接输出 \(n\) ,5pts。

\(k=1\) 时。直接树形dp,类似于小胖守皇宫,40pts。

正解:

  • 可以用树形dp过,但不好搞,不过大帝做到了。
  • 贪心,我们设 \(dp_{u,0}\) 表示 \(u\) 到最近被控制点的距离, \(dp_{u,1}\) 表示 \(u\) 到最远没被控制点的距离。

    初始化,\(dp_{u,0}=\infty,dp_{u,1}=0\),

    当 \(dp_{u,0}+dp_{u,1}<=k\) 时,说明该节点能被控制,不会对答案有贡献。 \(dp_{u,1}=-1\)

    当 \(dp_{u,1}=k\) 时,此时该点必须被控制,这时已经达到能控制点的的最远距离,如果再向上的话,则无法控制 \(u\)。 \(dp_{u,0}=0,dp_{u,1}=-1\)

    记得特判一下根节点能否被控制。
  • 还有种 \(\mathcal O(n)\) 做法
Code
#include<cstdio>
#define MAX 100001
#define re register
namespace OMA
{
int n,k,t;
struct Graph
{
int next;
int to;
}edge[MAX<<1];
int cnt=1,head[MAX];
int dp[MAX][2],ans;
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
inline void add(int u,int v)
{
edge[++cnt].next = head[u];
edge[cnt].to = v;
head[u] = cnt;
}
inline int min(int a,int b)
{ return a<b?a:b; }
inline int max(int a,int b)
{ return a>b?a:b; }
inline void dfs(int u,int fa)
{
dp[u][0] = 0x3f,dp[u][1] = 0;
for(re int i=head[u]; i; i=edge[i].next)
{
int v = edge[i].to;
if(v!=fa)
{
dfs(v,u);
if(~dp[v][1])
{ dp[u][1] = max(dp[u][1],dp[v][1]+1); }
dp[u][0] = min(dp[u][0],dp[v][0]+1);
}
}
if(dp[u][1]==k)
{ ans++,dp[u][0] = 0,dp[u][1] = -1; }
if(dp[u][0]+dp[u][1]<=k)
{ dp[u][1] = -1; }
}
signed main()
{
n = read(),k = read(),t = read();
for(re int i=1; i<=n-1; i++)
{
int u = read(),v = read();
add(u,v),add(v,u);
}
dfs(1,0);
if(~dp[1][1])
{ ans++; }
printf("%d\n",ans);
return 0;
}
}
signed main()
{ return OMA::main(); }

T3

考试的时候想了状压 \(k\) ,但是不会看到范围才想的状压

直接输出1,4pts。

对于 \(n\le16\) ,直接状压,24pts。

对于 \(m=1\) ,的情况,直接从前往后扫,遇见没亮的就点,28pts。

玄学 \(rand()\) ,可骗0~12pts不等 TLEer拿阳寿换的12pts

正解:

神仙转换。

先咕了QAQ

Code
#include<queue>
#include<cstdio>
#define MAX 40001
#define re register
namespace OMA
{
int n,k,m,cnt;
std::queue<int>q;
int vis[MAX],dis1[MAX];
int a[MAX],b[70],p[MAX];
int dis[20][20],top,dp[1<<17];
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
inline int min(int a,int b)
{ return a<b?a:b; }
inline void bfs(int u)
{
for(re int i=0; i<=n; i++)
{ dis1[i] = vis[i] = 0; }
q.push(u);
vis[u] = true;
while(!q.empty())
{
int k = q.front(); q.pop();
for(re int i=1; i<=m; i++)
{
int v[2] = {k-b[i],k+b[i]};
if(v[0]>=0&&!vis[v[0]])
{ q.push(v[0]),dis1[v[0]] = dis1[k]+(vis[v[0]] = 1); }
if(v[1]<=n&&!vis[v[1]])
{ q.push(v[1]),dis1[v[1]] = dis1[k]+(vis[v[1]] = 1); }
}
}
}
signed main()
{
n = read(),k = read(),m = read();
for(re int i=1; i<=k; i++)
{ a[read()] = 1; }
for(re int i=1; i<=m; i++)
{ b[i] = read(); }
for(re int i=0; i<=n; i++)
{
if(a[i]^a[i+1])
{ p[++cnt] = i; }
}
for(re int i=1; i<=cnt; i++)
{
bfs(p[i]);
for(re int j=1; j<=cnt; j++)
{ dis[i][j] = dis1[p[j]]; }
}
top = (1<<cnt)-1;
for(re int i=1; i<=top; i++)
{ dp[i] = 0x3f3f3f3f; }
for(re int i=0; i<=top; i++)
{
int k = 0;
while(i&(1<<k))
{ k++; }
for(re int j=k+1; j<=cnt-1; j++)
{
if(!(i&(1<<j))&&dis[j+1][k+1])
{ dp[i|(1<<j)|(1<<k)] = min(dp[i|(1<<j)|(1<<k)],dp[i]+dis[j+1][k+1]); }
}
}
printf("%d\n",dp[top]);
return 0;
}
}
signed main()
{ return OMA::main(); }

noip10的更多相关文章

  1. [NOIP10.6模拟赛]1.merchant题解--思维+二分

    题目链接: while(1)gugu(while(1)) 闲扯 考场上怕T2正解写挂其他两题没管只打了暴力,晚上发现这题思维挺妙的 同时想吐槽出题人似乎热衷卡常...我的巨大常数现在显露无疑QAQ 分 ...

  2. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树

    题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...

  3. [NOIP10.5模拟赛]1.a题解--离散化+异或线段树

    题目链接: 咕咕咕 https://www.luogu.org/problemnew/show/CF817F 闲扯 在Yali经历几天折磨后信心摧残,T1数据结构裸题考场上连暴力都TM没打满 分析 观 ...

  4. [NOIP10.5模拟赛]3.c题解--思维

    题目链接 这次不咕了 https://www.luogu.org/problemnew/show/AT2389 闲扯 考场20分爆搜走人 \cy 话说这几天T3都很考验思维啊 分析 我们先钦定一只鸡( ...

  5. [NOIP10.3模拟赛]3.w题解--神奇树形DP

    题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需 ...

  6. [NOIP10.4模拟赛]3.z题解--思维

    题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...

  7. [NOIP10.4模拟赛]2.y题解--折半搜索+状压计数

    题目链接: 咕 闲扯: 这题暴力分似乎挺多,但是一些奇奇怪怪的细节没注意RE了,还是太菜了 分析: 首先我们考虑最naiive的状压DP ,\(f[u][v][state]\)表示u开头,v结尾是否存 ...

随机推荐

  1. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  2. WPF教程一:创建Hello world来理解XAML的内容及编译

    在实际的WPF开发中遇到很多再用Winform写法来写WPF的开发人员,很多时候项目进度延期.出现非必要的BUG等等.大多是因为开发人员虽然是再写WPF. 但是没有好好的学过WPF,就导致无法发挥出W ...

  3. Quzrtz.net 示例

    //框架.Net Core 2.0//先用Nuget 安装最新quartz.net using System; using Quartz; using Quartz.Impl; using Syste ...

  4. 关键字abstract和static总结

    1.  abstract:意为抽象,在Java中可以修饰方法或者类 (1)修饰方法,这个方法是抽象方法,无方法体,这个类一定是抽象类,这个类的子类必须实现这个抽象方法: (2)修饰类,这个类一定是抽象 ...

  5. kong配置upstream实现简单的负载均衡

    目录 通过konga实现 1. 配置upstream 2. 配置Service发布 3. 配置Route,匹配规则 4. 验证结果 通过 Kong Admin API实现 1. 配置upstream ...

  6. OSSBrowser windows使用

    目录 1. 安装 2. 启动OSSBrowser并登录 1. 安装 下载地址:github或官方 2. 启动OSSBrowser并登录 ossbrowser安装包下载到本地解压之后,点击oss-bro ...

  7. F5节点分配查看

    查看F5将服务分配到那个节点上了. 第一步: ssh登陆信息和密码 用户名:root 密码:123@.com 第二步: 查看客户端的那个设备连接到F5之后被分配到那个节点上的语句 ssh name: ...

  8. TCP/IP 5层协议簇/协议栈

    TCP/IP 5层协议簇/协议栈 数据/PDU 应用层 PC.防火墙 数据段/段Fragment 传输层 防火墙 报文/包/IP包packet 网络层 路由器 帧Frame 数据链路层 交换机.网卡 ...

  9. VisualEffectGraph基础操作 --创建VEG项目步骤讲解

    一:建立VEG项目步骤 首先打开Unity Hub,  使用unity2020.1 新建项目(本技术博客,默认使用unity2020.1 版本演示),选择HDRP 高清渲染管线,确定项目目录与名称. ...

  10. 家庭账本开发day11

    编写登录界面和个人信息查看界面 $.ajax({                    url: "UserServlet?method=login",//url          ...