Day2下午解题报告
预计分数: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下午解题报告的更多相关文章
- 「雅礼集训 2017 Day2」解题报告
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
- Day1下午解题报告
预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...
- Day4下午解题报告
预计分数:30+30+0=60 实际分数:30+30+10=70 稳有个毛线用,,又拿不出成绩来,, T1 https://www.luogu.org/problem/show?pid=T15626 ...
- Day2上午解题报告
预计分数:100+0+60=160 实际分数:100+0+60=160 mmpT1数据错了... T1遭遇 题目描述 你是能看到第一题的 friends呢. —— hja ?座楼房,立于城中 . 第? ...
- Day3下午解题报告
预计分数:20+40+30=90 实际分数:40+90+60=190 再次人品爆发&&手感爆发&&智商爆发 谁能告诉我为什么T1数据这么水.. 谁能告诉我为什么T2数据 ...
- Day5下午解题报告1
预计分数:100+60+30=190 实际分数:100+60+30=190 终于有一道无脑T1了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...
- GX/GZOI2019 day2 解题报告
GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...
- 【NOIP2015】提高day2解题报告
题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...
- 【未完成0.0】Noip2012提高组day2 解题报告
第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...
随机推荐
- [Python] Boolean Or "Mask" Index Arrays filter with numpy
NumPy Reference: Indexing Integer array indexing Boolean array indexing Note: The expression a < ...
- Android中System.currentTimeMillis()
函数: System.currentTimeMillis(): 功能:产生一个当前的毫秒,这个毫秒事实上就是自1970年1月1日0时起的毫秒数,Date()事实上就是相当于Date(System.cu ...
- vue2.0-elementUI
main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import ...
- ISheet ICell
/// <summary> /// Gets the first row on the sheet /// </summary> /// <value>the nu ...
- Material Design控件使用学习 TabLayout+SwipeRefreshlayout
效果: Tablayout有点类似之前接触过的开源ViewPagerIndicator,将其与viewpager绑定,可实现viewpager的导航功能. SwipeRefreshLayout是官方出 ...
- Centos7 ssh免密码登陆
摘要:安装openssl openssl-devel 不过有些centos自带 192.168.161.5 192.168.161.15 本版本用centos7 (192.168.161.5) yu ...
- Restricted Boltzmann Machines
转自:http://deeplearning.net/tutorial/rbm.html http://blog.csdn.net/mytestmy/article/details/9150213 能 ...
- Tensorflow 函数学习笔记
A: A:## tf.argmax(A, axis).eval() 输出axis维度上最大的数的索引 axis=0:列,axis=1:行 A:## tf.add(a,b) 创建a+b的计算图 A:# ...
- strings---对象文件或二进制文件中查找可打印的字符串
strings命令在对象文件或二进制文件中查找可打印的字符串.字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束. strings命令对识别随机对象文件很有用. 语法 strings [ - ...
- CCF模拟 无线网络
无线网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上.任何两个无线路由器只要距离不超过 r 就能互相 ...