sb\(O(n^{2})\)传参

T1

暴力一会儿就码好,结果..

祭奠一下死去的代码

died
#include<cstdio>
#define MAX 1010
#define re register
namespace OMA
{
int n,q;
int r,c,l,s;
struct martix
{
int ar[MAX][MAX];
inline friend martix operator +(martix a,int add)
{
for(re int i=r; i<=r+l-1; i++)
{
for(re int j=c; j<=i-r+c; j++)
{ a.ar[i][j] += add; }
}
return a;
}
inline int ans()
{
int sum = 0;
for(re int i=1; i<=n; i++)
{
for(re int j=1; j<=n; j++)
{ sum ^= ar[i][j]; }
}
return sum;
}
inline void print()
{
for(re int i=1; i<=n; i++)
{
for(re int j=1; j<=n; j++)
{
printf("%d ",ar[i][j]);
}
printf("\n");
}
}
}u;
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(),q = read();
for(re int i=1; i<=q; i++)
{ r = read(),c = read(),l = read(),s = read(); u = u+s; }
//u.print();
printf("%d\n",u.ans());
return 0;
}
}
signed main()
{ return OMA::main(); }

好吧,其实是我传参的时候传了个1000*1000的矩阵进去,然后就炸了,我真傻,真的打暴力还整花活,还打挂了,给1pts都算便宜我了。

正解:

差分。

Code
#include<cstdio>
#define MAX 2010
#define re register
#define int long long
namespace OMA
{
int n,q,ans;
int r,c,l,s;
int sum[MAX][MAX][2];
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(),q = read();
for(re int i=1; i<=q; i++)
{
r = read(),c = read(),l = read(),s = read();
sum[r][c][0] += s,sum[r+l][c][0] -= s;
sum[r][c+1][1] -= s,sum[r+l][c+l+1][1] += s;
}
for(re int i=1; i<=n; i++)
{
int tmp = 0;
for(re int j=1; j<=n; j++)
{
sum[i][j][0] += sum[i-1][j][0],sum[i][j][1] += sum[i-1][j-1][1];
ans ^= tmp += (sum[i][j][0]+sum[i][j][1]);
}
}
printf("%lld\n",ans);
return 0;
}
}
signed main()
{ return OMA::main(); }

T2

考场一看期望直接跳

明显的状压,但更明显的是,数组开不下,所以考虑map,但是会TLE几个点,所以考虑手写hash表,可是太慢了,所以考虑特判,很明显,对于 \(k=n\) 或 \(k=n-1\) 的点,答案即为白色球的个数。特判一下就好,跑得还飞快

特判前:

优化特判后:

Code
#include<cstdio>
#include<cstring>
#include<iostream>
#define re register
#define seed 1000007
namespace OMA
{
struct Hash_map
{
struct node
{
int next;
int len;
int to;
double v;
}star[seed];
int len,cnt,head[seed];
inline double &operator [](int sta)
{
int key = 1LL*sta*len%seed;
for(re int i=head[key]; i; i=star[i].next)
{
if(star[i].to==sta&&star[i].len==len)
{ return star[i].v; }
}
return star[++cnt] = (node){head[key],len,sta,-1},head[key] = cnt,star[cnt].v;
}
}map;
int n,k;
inline double dfs(int len,int sta)
{
if(len==n-k)
{ return 0; }
map.len = len;
if(map[sta]>-1.0)
{ return map[sta]; }
int temp,tmp[50];
map[temp = sta] = 0;
for(re int i=1; i<=len; i++)
{ tmp[i] = temp&1,temp >>= 1; }
for(re int i=1; i<=len/2; i++)
{
double tmp1 = dfs(len-1,((sta>>(len-i+1))<<(len-i))|(sta&((1<<len-i)-1)))+tmp[len-i+1];
double tmp2 = dfs(len-1,((sta>>i)<<(i-1))|(sta&((1<<i-1)-1)))+tmp[i];
map.len = len,map[sta] += 2.0/len*std::max(tmp1,tmp2);
}
if(len&1)
{
double tmp1 = dfs(len-1,(sta>>(len-((len>>1)+1)+1))<<(len-((len>>1)+1))|(sta&((1<<(len-((len>>1)+1)))-1)))+tmp[len/2+1];
map.len = len,map[sta] += 1.0/len*tmp1;
}
return map[sta];
}
int sta,cnt;
char ch[50];
signed main()
{
scanf("%d%d%s",&n,&k,ch+1);
for(re int i=1; i<=n; i++)
{ sta <<= 1; if(ch[i]=='W'){ cnt++,sta++; } }
if(k&&(k==n||k==n-1))
{ printf("%0.10lf\n",(double)cnt); return 0; }
printf("%0.10lf\n",dfs(n,sta));
return 0;
}
}
signed main()
{ return OMA::main(); }

T3

考试的时候奔着1pts的点,结果加了个判断,0pts,你骗分还特判个什么啊

正解:

是个树形dp

快考试了,先咕了

Code
#include<cstdio>
#define MAX 100010
#define re register
#define INF 114514810
namespace OMA
{
int n;
struct Graph
{
int next;
int to;
int w;
}edge[MAX<<1];
int cnt=1,head[MAX];
struct node
{
int a,b;
friend bool operator <(const node &a,const node &b)
{ return a.a==b.a?a.b<b.b:a.a<b.a; }
}dp[MAX][2];
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,int w)
{
edge[++cnt].next = head[u];
edge[cnt].to = v;
edge[cnt].w = w;
head[u] = cnt;
}
inline node calc(node a,node b)
{ return (node){a.a+b.a,a.b+b.b}; }
inline node min(node a,node b)
{ return a<b?a:b; }
inline void dfs(int u,int fa,int w)
{
node a = (node){INF,INF},b = (node){0,0};
for(re int i=head[u]; i; i=edge[i].next)
{
int v = edge[i].to,w = edge[i].w;
if(v!=fa)
{
dfs(v,u,w);
node tmp1 = min(calc(a,dp[v][0]),calc(b,dp[v][1]));
node tmp2 = min(calc(b,dp[v][0]),calc(a,dp[v][1]));
a = tmp1,b = tmp2;
}
}
if(w==1)
{ dp[u][0] = (node){INF,INF}; }
else
{ dp[u][0] = min(b,(node){a.a+1,a.b}); }
if(!w)
{ dp[u][1] = (node){INF,INF}; }
else
{ dp[u][1] = min((node){a.a,a.b+1},(node){b.a+1,b.b+1}); }
}
inline int w(int c,int d)
{ return d==2?d:c!=d; }
signed main()
{
n = read();
for(re int i=1; i<=n-1; i++)
{
int u = read(),v = read(),c = read(),d = read();
add(u,v,w(c,d)),add(v,u,w(c,d));
}
dfs(1,0,2);
printf("%d %d\n",dp[1][0].a>>1,dp[1][0].b);
return 0;
}
}
signed main()
{ return OMA::main(); }

noip19的更多相关文章

  1. 20210718 noip19

    考场 去年考过这场,心态直接爆炸 T1 一眼 T2 当初是我讲的,基本都记得(flag) T3 只记得是树形 DP,但觉得 rush 完前两题后用大量时间应该能搞出来 结果 T2 写了好久,还写假了. ...

  2. 20210716考试-NOIP19

    u,v,w. 这场考过. T1 u 差分裸题 #include<bits/stdc++.h> using namespace std; const int N=5000; int n,m; ...

随机推荐

  1. buu 红帽杯easyre

    一.拖入ida静态分析 找到关键函数,然后 这步是可以得出前4个字符是flag,不知道为啥我这边的v15的内存地址为空,不然可以异或解出来的,ida日常抽风... 十次的base64加密,我用在线平台 ...

  2. mongodb在双活(主备)机房的部署方案和切换方案设计

    1. 概述 现在很多高可用系统为了应对极端情况,比如主机宕机.网络故障以及机房宕机等灾难的发生,通常会部署主备架构(双机房),或者双活架构(双机房),甚至多活架构(三个机房或者以上),mongodb天 ...

  3. C语言:进制转化

    16进制数4321转10进制:原来方法 =4*16^3+3*16^2+2*16^1+1*16^0 =4*16^3+3*16^2+2*16^1+1 =16*(4*16^2+3*16^1+2)+1 =16 ...

  4. 用Python分析下王小波与李银河写情书最爱用哪些词

    作家王小波其实也是我国最早期的程序员,突发奇想,王小波写情书最喜欢用哪些词呢?用Python词云分析下! 直接上代码吧,有注释很好理解.输出的图片设置的比较大,所以运行的比较慢,可以适当把图片尺寸改小 ...

  5. matlab——线性规划

    @ 目录 前言 一.基本概念 二.matlab实现 1.常用函数 2.常见变形 参考书目 前言 线性规划是数学规划中的一个重要分支,常用于解决如何利用现有资源来安排生产,以取得最大经济效益的问题.本文 ...

  6. 深入GraphQL 的使用语法

    深入GraphQL 的使用语法 对于GraphQL 的使用语法在上一节中已经大概介绍了基本的使用方式了,这一篇将会对上一篇入门做拓展,努力将所有的使用语法都覆盖到. 1. 终端语法 首先是介绍在前端查 ...

  7. 如何在cmd中运行.py文件

    C:\Users\mf>cd C:\Program Files\Python36\ C:\Program Files\Python36>python const.py 切换到.py文件所在 ...

  8. 【洛谷P1962 斐波那契数列】矩阵快速幂+数学推导

    来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_ ...

  9. NPM 所有的指令已经问题 使用淘宝镜像 出现code EAI_AGAIN

    windows怎么卸载cnpm? npm uninstall cnpm -g windows怎么检测cnpm是否安装成功 cnpm -v 我们直接将node的仓库地址换成淘宝仓库地址即可 单次使用 n ...

  10. 还不了解一下 Java 8 Predicate 函数接口

    同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...