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)的最小正整数解. 格式 输入格式 输入只有一 ...
随机推荐
- Android Studio更改项目SDK的版本
Elipse 中的安卓项目,在Android Studio中可以通过File -->new -- > Import Project的方法建立起来.但是有时候需要用到更改项目的API Lev ...
- HDU 5386 Cover(模拟)
Cover Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- bzoj2843极地旅行社题解
题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出yes并修建.改动一个岛上帝企鹅的 ...
- OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)
//一: 迭代器 //数组 NSArray *arr=@[@"1",@"2",@"3",@"4",@"5&qu ...
- FPGA主要应用
FPGA主要应用: 1.逻辑控制(逻辑接口领域) 传统方向,主要用于通信设备的高速接口电路设计,用FPGA处理高速接口的协议,并完成高速的数据收发和交换.FPGA最初以及到目前最广的应用就是在通信领域 ...
- 洛谷P4051 [JSOI2007]字符加密
题目描述 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法. 例如‘JSOI07’,可以读作 ...
- 网络场景图WebScene介绍
网络场景图的创建同样需要ID,然后再放入3维的地图底图中. 1.创建一个新的网络场景图 "esri/WebScene" var scene = new WebScene({ por ...
- js笔记3
1字符串 replace("","")替换,前面为要替换什么,后面为替换的内容只能替换一个 2DOM 时间三要素 事件源 谁身上发生的行为 事件 单机 双击 事 ...
- CodeForcesGym 100502D Dice Game
Dice Game Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForcesGym. Or ...
- 整理一些PHP开发安全问题
整理一些PHP开发安全问题 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患.最近须要总结一下以往的问题,在这里借翻译一篇文章同一时候加上自己开发的一些感触总结一下. 简单介绍 当开 ...