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. 输出 time 命令的结果到文件中

    译至:http://unicus.jp/skmk/archives/338 由于输出 time 命令的结果到文件时使用的错误的方式,所以将其记录下来. 环境是bash. 目标 将运行的a.out程序的 ...

  2. 等了半年,m1芯片原生支持的.NET IDE出现了

    m1芯片是苹果2020年发布的一款基于arm的桌面芯片,目前已经应用在MacBook Air .MacBook Pro.IMac.Ipad等设备上.可以说整个苹果生态圈都在去intel化. 今年年初跟 ...

  3. 得力e+考勤机更新网络连接

    1.进入APP,"企业信息"最下面"设备" 2.显示对应的设备的在线或离线 3.点击 >>>,点击"离线",连接蓝牙(手机 ...

  4. 【论文阅读】End to End Learning for Self-Driving Cars

    前言引用 [1] End to End Learning for Self-Driving Cars从这里开始 [1.1] 这个是相关的博客:2016:DRL前沿之:End to End Learni ...

  5. Collection集合工具类

    Ⅷ.Collections 工具类 java.util.Collections Collections 集合工具类,用来对集合进行操作,部分重要方法如下: 1.public static <T& ...

  6. 2021 MySQL安装教程(最新教程)- 含网盘下载

    大家好,我是 我玩亚索我会C.最近电脑重装系统了,然后就想着装个MySQL,由于很久没装过了,于是上网搜索了教程,但是发现现在MySQL安装和之前的不一样了,网上都是旧版的安装教程,所以我就做一篇新版 ...

  7. python内置函数dir()

    描述 dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(),该方法将被调用.如果参数不包含__dir__(), ...

  8. sqliab刷题笔记-联合注入

    Less-1 测试是字符型还是数字型 判断所在字段数 查看显示值 可以看出显示2,3位置.因此我们选择2的位置进行联合注入 查看表名 我们要对admin,users等字符敏感 查看admin表中的字段 ...

  9. SQlL 中 where 1=1

    提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以. 这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的. 如:web界面查询 ...

  10. 第三篇--如何修改exe文件版本号和文件信息

    控制台程序添加版本信息方法: 项目右键 Add-->Resource-->选择Version-->new,然后就可以修改里面的信息了,重新编译一下就OK.