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. 按键控制LED灯-ESP32中断处理

    #include <driver/gpio.h> #include <esp_task_wdt.h> #include <freertos/FreeRTOS.h> ...

  2. Vue中watch与computed的区别

    一. 计算属性(computed) 1.计算属性是为了模板中的表达式简洁,易维护,符合用于简单运算的设计初衷.对于运算过于复杂,冗长,且不好维护,因此我们对于复杂的运算应该 使用计算属性的方式去书写. ...

  3. Luogu P4313 文理分科

    link 最小割 双倍经验 这道题运用了最小割最常用的一种用法:集合划分. 因为源汇最小割即就是将源汇划分到不同的集合,那么最简单的应用就是最小代价划分集合了. 本题中,题意是将 \(n\cdot m ...

  4. 「ARC103D」 Distance Sums

    「ARC103D」 Distance Sums 传送门 水题. 首先如果让你求树上的节点 \(i\) 到其它所有节点的距离和,这是非常简单的,这就是非常常规的换根 \(\texttt{DP}\). 那 ...

  5. [刘阳Java]_MySQL数据优化总结_查询备忘录

    数据库优化是在后端开发中必备技能,今天写一篇MySQL数据优化的总结,供大家看看 一.MySQL数据库优化分类 我们通过一个图片形式来看看数据优化一些策略问题 不难看出,优化有两条路可以选择:硬件与技 ...

  6. 【剑指offer】42.和为S的两个数字

    42.和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 示例: 输入:[1,2,4,7,11 ...

  7. Python基础之读写xml总结

    参考文章:https://blog.csdn.net/weixin_42749767/article/details/82770563 先介绍xml.dom.minidom包,有一个读写的例子 rea ...

  8. C#曲线分析平台的制作(一,ajax+json前后台数据传递)

    在最近的项目学习中,需要建立一个实时数据的曲线分析平台,这其中的关键在于前后台数据传递过程的学习,经过一天的前辈资料整理,大概有了一定的思路,现总结如下: 1.利用jquery下ajax函数实现: & ...

  9. js 跨域请求失败

    注:错误返回:Failed to load http://xxxxxxxxxxx: No 'Access-Control-Allow-Origin' header is present on the ...

  10. 漫谈CUDA优化

    ​ 作者:Lawliet 翻译:仿佛若有光 前言: 几个月前,我根据 Simoncelli 2016 年的论文编写了自己的自动编码器,用于研究目的.一开始,我想使用一些流行的深度学习框架(例如 Ten ...