预计分数:100+100+30=230

实际分数:100+100+30=230
人品爆发&&智商爆发&&手感爆发

T3数据好水,,要是把数组开大一点的话还能多得10分,,,

T1洗澡

原题,不多说了。。

当时在北京花了接近一个小时才A..

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN=1e6;
const int INF=0x7ffff;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
char a[MAXN];
int main()
{
//freopen("shower.in","r",stdin);
//freopen("shower.out","w",stdout);
scanf("%s",a+);
int l=strlen(a+);
int now=,ans=;
for(int i=;i<=l;i++)
{
if(a[i]=='(')
{
if(now==l/) ans++,now--;//修改
else now++;
}
else
{
if(now==) ans++,now++;
else if(now<=l/) now--;
}
}
printf("%d",ans+now/);
return ;
}

T2日记

一开始想到了70分的做法,写着写着就会100分的做法了。。

先打个素数表,

对于每次询问的n

upperbound一个值,再在k-这个值之间二分,

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
const LL MAXN=1e6+;
const LL INF=0x7ffff;
inline LL read()
{
char c=getchar();LL flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
LL T;
LL vis[MAXN];
LL prime[MAXN];
LL sprime[MAXN];
LL tot=;
LL check(LL mid,LL n,LL k)
{
if(sprime[mid]-sprime[mid-k]<=n) return ;
else return ;
}
int main()
{
// freopen("diary.in","r",stdin);
// freopen("diary.out","w",stdout);
for(LL i=;i<=sqrt(1e6);i++)
{
if(vis[i]==)
for(LL j=i*i;j<=1e6;j+=i)
vis[j]=;
}
for(LL i=;i<=1e6;i++) if(vis[i]==)
prime[++tot]=i;
//for(LL i=1;i<=tot;i++)
// printf("%d\n",prime[i]);
T=read();
for(LL i=;i<=tot;i++)
sprime[i]=sprime[i-]+prime[i];
while(T--)
{
LL n=read(),k=read();
LL pos=upper_bound(prime+,prime+tot+,n)-prime;pos--;
LL ans=;
bool flag=;
LL l=k,r=pos;
while(l<=r)
{
LL mid=l+r>>;
if(check(mid,n,k)) flag=,ans=mid,l=mid+;
else r=mid-;
}
LL out=sprime[ans]-sprime[ans-k];
if(flag==) printf("%lld\n",out);
else printf("-1\n");
}
return ;
}

T3洗衣

直觉告诉我,这题一定非常难,,

因为我连暴力都不会打,

想了几分钟,感觉30分可以做,就是比较奇葩,,,需要存2^m棵树,

代码很恶心,,不过还好没敲炸

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue> using namespace std;
const int MAXN=;
const int INF=0x7ffff;
const int mod=1e9+;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
struct TREE
{
struct node
{
int u,v,w,nxt;
}edge[MAXN];
int head[MAXN];
int num;
int siz;//树的大小
int bg;//第一个节点的编号
TREE()
{
memset(head,-,sizeof(head));
num=;siz=;bg=;
}
void add_edge(int x,int y,int z)
{
edge[num].u=x;
edge[num].v=y;
edge[num].w=z;
edge[num].nxt=head[x];
head[x]=num++;
}
}tree[MAXN];
int treenum=;
inline void merge(int t1,int n1,int t2,int n2,int val)
{
treenum++;
for(int i=;i<=tree[t1].num-;i++)
tree[treenum].add_edge(tree[t1].edge[i].u,tree[t1].edge[i].v,tree[t1].edge[i].w);
for(int i=;i<=tree[t2].num-;i++)
tree[treenum].add_edge(tree[t2].edge[i].u+tree[t1].siz,tree[t2].edge[i].v+tree[t1].siz,tree[t2].edge[i].w);
tree[treenum].add_edge(n1,n2+tree[t1].siz,val);
tree[treenum].add_edge(n2+tree[t1].siz,n1,val);
tree[treenum].siz=tree[t1].siz+tree[t2].siz;
}
int dis[MAXN];
int vis[MAXN];
int ans=;
inline void BFS()
{
for(int k=;k<=tree[treenum].siz-;k++)
{
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
dis[k]=;
queue<int>q;
q.push(k);
while(q.size()!=)
{
int p=q.front();
q.pop();
for(int i=tree[treenum].head[p];i!=-;i=tree[treenum].edge[i].nxt)
if(vis[tree[treenum].edge[i].v]==)
vis[tree[treenum].edge[i].v]=,
dis[tree[treenum].edge[i].v]=(dis[p]+tree[treenum].edge[i].w)%mod,
q.push(tree[treenum].edge[i].v);
}
for(int i=k+;i<=tree[treenum].siz-;i++)
ans=(ans+dis[i])%mod;
}
}
int main()
{
// freopen("cloth.in","r",stdin);
// freopen("cloth.out","w",stdout);
int n=read();
for(int i=;i<=n;i++)
{
int a=read(),b=read(),c=read(),d=read(),e=read();
merge(a,c,b,d,e);
ans=;
BFS();
printf("%d\n",ans);
}
return ;
}

40分暴力

100分

考虑每一棵树的组成

一棵树的答案一定包含了左边的树的答案

$f[i]=f[j]+f[k]+dis[new]$

考虑如何计算$dis[new]$

dis[i]=原来的j+新加的(左边树的大小*右边树的大小)+原来的k

原来的j=siz[j]*所有点到p1点的距离

$k=siz[k]+g[k][p2]$//g在第k棵树中所有点到达p的距离

考虑如何求g

dp

设i是由j,k合并而来

$g[i][p]=g[j][p]+L+dis[j][p][p1]*siz[k]+g[k][p2]$

——》会T会boom——》开map做记忆化搜索

dis[j][p][p3]+l+dis[k][p2][p4]记忆化搜索

总结:

这次考的好是有诸多方面的原因的。。

T1原题,T2不难,T3正解非常难,暴力需要较强的代码能力

这一套题貌似就是为我量身定做的啊233333

Day2下午解题报告的更多相关文章

  1. 「雅礼集训 2017 Day2」解题报告

    「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...

  2. Day1下午解题报告

    预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...

  3. Day4下午解题报告

    预计分数:30+30+0=60 实际分数:30+30+10=70 稳有个毛线用,,又拿不出成绩来,, T1 https://www.luogu.org/problem/show?pid=T15626 ...

  4. Day2上午解题报告

    预计分数:100+0+60=160 实际分数:100+0+60=160 mmpT1数据错了... T1遭遇 题目描述 你是能看到第一题的 friends呢. —— hja ?座楼房,立于城中 . 第? ...

  5. Day3下午解题报告

    预计分数:20+40+30=90 实际分数:40+90+60=190 再次人品爆发&&手感爆发&&智商爆发 谁能告诉我为什么T1数据这么水.. 谁能告诉我为什么T2数据 ...

  6. Day5下午解题报告1

    预计分数:100+60+30=190 实际分数:100+60+30=190 终于有一道无脑T1了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...

  7. GX/GZOI2019 day2 解题报告

    GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...

  8. 【NOIP2015】提高day2解题报告

    题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...

  9. 【未完成0.0】Noip2012提高组day2 解题报告

    第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...

随机推荐

  1. uip UDP server广播模式(client能够随意port,而且主动向client发送数据)

    眼下移植uip,发现UDP server模式下,必须指定本地port以及clientport,否则仅仅能讲clientport设置为0,才干接收随意port的数据,可是无法发送数据,由于此时clien ...

  2. Android开发之Volley网络通信框架

    今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下用法.方便以后VC. Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮.) 功能模块: 1. JSON, ...

  3. vue26-2.0循环

    3. 循环 2.0里面默认就可以添加重复数据 arr.forEach(function(item,index){ }); 去掉了隐式一些变量 $index $key 之前: v-for="( ...

  4. Android Private Libraries 和 Dependencies的区别

    Android项目开发中,是不是常看到android-support-v4.jar.appcompat_v7.jar等的jar包? 至于为什么要添加这些包?添加有什么用?添加到哪里?相信很多人没过多关 ...

  5. vim 脚本之快捷注释

    今天初步学习了下vim的脚本知识,并尝试写了一个简单的脚本.当然,这个脚本很简单,使用的方法也很笨拙.不过,这仅仅是一个开始,等以后随着对vim语法的深入了解,会不断优化这个脚本的.先记录下来 &qu ...

  6. Pocket英语语法---一、形容词性物主代词和名词性物主代词

    Pocket英语语法---一.形容词性物主代词和名词性物主代词 一.总结 一句话总结:名词性物主代词=形容词性物主代词+名词 Is that your umbrella? This is your c ...

  7. CSS3侧滑导航

    <!DOCTYPE> <html> <head> <meta charset="utf-8" /> <meta name=&q ...

  8. perl编程问题

    一.Hash类型 1.hash遍历输出:如果hash遍历输出的时候不是按key则会按数组输出. my %hash=(); ${hash}{"a"}="1"; $ ...

  9. tcpg通信

    1.客户端 from socket import * def main(): # 创建套接字 tcp_socket = socket(AF_INET,SOCK_STREAM) # 链接服务端 ip = ...

  10. Ubuntu 16.04安装mysql (连接)

    1.安装mysql sudo apt-get install mysql-server 注:若出现依赖问题安装失败,先执行以下命令sudo apt-get install -f 2.安装过程中会输入密 ...