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. java基础---数组的基本概念(1)

    学习资源来自尚硅谷java基础学习 1. 数组的概念 数组(Array), 是多个相同类型数据按一定顺序排列的集合, 并使用一个名字命名, 并通过编号的方式对这些数据进行统一管理. 数组属于引用数据类 ...

  2. TWAIN.CPP

    include "twaincpp.h" #include <QtGlobal> #include <QDateTime> #include <QSt ...

  3. C语言:printf("")标志详解

    %d 十进制整数 %ld  十进制长整型 %hd 十进制短整型 %o 八进制整数 %X  %x  十六进制 整数 %f 以十进制形式输出 float 类型: %lf 以十进制形式输出 double 类 ...

  4. 剖析:如何用 SwiftUI 5天组装一个微信 —— 通讯录发现我篇

    前置资源 GitHub: SwiftUI-WeChatDemo 第零章:用 SwiftUI 5天组装一个微信 第一章:剖析:如何用 SwiftUI 5天组装一个微信 -- 聊天界面篇 通讯录 通讯录的 ...

  5. 如何让Spring Boot 的配置动起来?

    前言 对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的. 但是对 ...

  6. 简单快速安装Apache+PHP+MySql服务环境(四)—— 将php版本升级到7.2

    书接上文,简单快速安装Apache+PHP+MySql服务环境(二)-- centos使用yum安装指定版本的php. 随着各种PHP框架的升级,对PHP的版本也有了更高的要求,所以笔者也尝试着更新升 ...

  7. python调用接口方式

    python中调用API的几种方式: - urllib2- requests 一.调用别人的接口 案例1.urllib2 import urllib2, urllib github_url ='htt ...

  8. Java规范的三种注释方式:

    1.单行注释 // //单行注释 2.多行注释 /* */ /* 多行 注释 */ 3.文档注释[java特有的] /** */ ◆注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文 ...

  9. 关于XP系统因以下文件的损坏或丢失,WINDOWS无法启动:\windows\system32\config\system的解决思路实践

    故事背景:在合肥项目中,现场一台使用超过6年的工控机,在近段时间内出现上述标题中出现的系统文件丢失问题 ,该问题重启复现,无法通过传统进入安全模式或者最后一次正确配置等方式进行修复,只能通过将repa ...

  10. js 数据存入数组

    var tag = []; $('.deltag').each(function(){ if($(this).attr("checked")== 'checked'){ tag.p ...