Day2下午
Posted wang者归来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day2下午相关的知识,希望对你有一定的参考价值。
T1
洗澡
【问题描述】
你是能看到第一题的friends 呢。
——hja
洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代价(将左括
号变成右括号或者相反),求最小代价使得括号序列合法。
【输入格式】
一行一个括号序列。
【输出格式】
一行一个整数代表答案。
【样例输入】
())(
【样例输出】
2
【数据范围与规定】
对于50%的数据,括号序列长度不超过100。
对于100%的数据,括号序列长度不超过105且一定为偶数,只包含小括
号。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> #include<cmath> #include<ctime> using namespace std; char s[100009]; int len; int ans,sum; int main() { freopen("shower.in","r",stdin); freopen("shower.out","w",stdout); cin>>(s+1); len=strlen(s+1); for(int i=1;i<=len;i++) { if(s[i]==‘(‘) sum++; else sum--; if(sum<0) ans++,sum+=2; } if(sum) ans+=sum/2; cout<<ans; return 0; }
T2
日记
【问题描述】
你是能看到第二题的 friends呢。
—— laekov
日记之中,写满了质数两个间如果没有其他那么则称为相 邻的质数。给定 ??,??,询问不超过 ??的数中能够表示成连续 ??个质数之和的最大 的数是多少。
【输入格式】
第一行个整数 ??代表数据组。
对于每组数据,一行 行两个整数 ??,??。
【输出格式】
对于每组数据,一行个整代表答案。如果不存在则输出 ?1。
【样例输入】
3
20 2
20 3
20 4
【样例输出】
18
15
17
【数据范围与规定】
对于 20%的数据 ,1≤??≤100。
对于 40%的数据 ,??=1。
对于 另外 20%的数据 ,所有的 询问??相等 。
对于 100%的数据 ,1≤??<2000,1≤??≤106。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> #include<cmath> #include<ctime> using namespace std; const int N=1000000+4; int prime[N],cnt; bool is[N]; int T; void first() { cnt=0; for(int i=2;i<=N;i++) { if(!is[i]) prime[++cnt]=i; for(int j=1;j<=cnt;j++) { if(i*prime[j]>N) break; is[i*prime[j]]=1; if(i%prime[j]==0) break; } } return ; } int work(int mid,int len) { int sum=0; for(int i=mid;i<=mid+len-1;i++) sum+=prime[i]; return sum; } int main() { freopen("diary.in","r",stdin); freopen("diary.out","w",stdout); first(); scanf("%d",&T); for(int i=1,n,k;i<=T;i++) { scanf("%d%d",&n,&k); int j=1,sum=0,L,R,mid; if(n<=100) { j=1,sum=0; for(j=1;j<=k;j++) sum+=prime[j];j--; if(n<sum) { printf("-1\n"); continue; } while(sum+prime[j+1]-prime[j-k+1]<=n) sum=sum+prime[j+1]-prime[j-k+1],j++; printf("%d\n",sum); continue; } L=1,R=cnt-k+1; while(L<=R) { mid=(L+R)>>1; if(work(mid,k)<=n) L=mid+1; else R=mid-1; } for(j=min(cnt,L);j>=R;j--) if((sum=work(j,k))<=n) { printf("%d\n",sum); break; } } return 0; }
T3
洗衣
【问题描述】
你是能看到第三题的 friends呢。
—— aoao
洗完衣服,就要晒在树上 洗完衣服,就要晒在树上 。但是这个世界并没有树,我们需要重新开始造。 但是这个世界并没有树,我们需要重新开始造。 我们一开始拥有 ??0,是一棵只有个点的树,我们要用它造出更多。
生成第 ??棵树我们需要五个参数 ????,????,????,????,????(????,????<??)。我们生成第 。我们生成第 ??棵树是 将第 ????棵树的 ????号点和第 ????棵树的 ????号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 号点用一条长度为 ????的边连接起来形成新 的边连接起来形成新 的树 (不会改变原来两棵树 不会改变原来两棵树 不会改变原来两棵树 不会改变原来两棵树 )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: )。下面我们需要对新树中的点重编号: 对于原来在 第????棵树中的点 ,我们不会改变他的编号 ;对于原来在第 ????棵树中的点 ,我们 会将他们的编号加上第 ????棵树的点个数作为新编号 。
定义 ??(????)=ΣΣ??(????,????)???1??=??+1???1??=0
其中 ,??为树 ????的大小 ,????,????是????中的 点, ??(????,????)代表这两个点的距离。现 代表这两个点的距离。现 在希望你求出 ?1≤??≤??,??(????)是多少 。
【输入格式】
第一行 一个整数 ??,代表要造多少棵树 。
接下来 ??行 ,每5个数 ????,????,????,????,????。
【输出格式】
??行每一个整数代表 ??(????)对109+7取模之后的值 。
【样例输入】
3
0 2
1 0 4
2 1 0 3
【样例输出】
2
28
216
P105 zhx 洗衣
第 5 页 共 5 页
【数据规模与约定】
对于 30%的数据, 1≤??≤10。
对于 60%的数据 ,每棵树的点数个不超过 105。
对于 100%的数据 ,1≤??≤60。
以上是关于Day2下午的主要内容,如果未能解决你的问题,请参考以下文章