T1 洗澡

贪心:将未匹配的右括号花费1变为左括号,最有多余的左括号有一半变成右括号

 #include <cstring>
#include <cstdio> const int N();
int n,top,ans;
char s[N]; int Presist()
{
freopen("shower.in","r",stdin);
freopen("shower.out","w",stdout);
scanf("%s",s); n=strlen(s);
for(int i=; i<n; ++i)
{
if(s[i]=='(') top++;
else
{
if(top<) top++,ans++;
else top--;
}
}
printf("%d\n",ans+top/);
return ;
} int Aptal=Presist();
int main(int argc,char*argv[]){;}

AC

T2 日记

线性筛出1e6内的所有素数,一共78000++个,对于每次询问暴力查找(可二分)符合条件的最大数,1.6*10^8

 #include <cstdio>

 inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N(1e6+);
bool not_pri[N],flag;
long long sum[N];
int pri[N],cnt,t; inline void Prepare()
{
register int i,j;
for(i=; i<=1e6; ++i)
{
if(!not_pri[i]) pri[++cnt]=i;
for(j=; j<=cnt; ++j)
{
if(i*pri[j]>1e6) break;
not_pri[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
for(i=; i<=cnt; ++i)
sum[i]=sum[i-]+1ll*pri[i];
} int Presist()
{
freopen("diary.in","r",stdin);
freopen("diary.out","w",stdout);
// freopen("1.txt","r",stdin);
Prepare(); read(t);
for(register int n,k,i,j; t--; )
{
read(n),read(k); flag=;
for(i=cnt; i>=k; --i)
{
j=i-k;
if(sum[i]-sum[j]<=n)
{
printf("%I64d\n",sum[i]-sum[j]);
flag=; break;
}
}
if(flag) puts("-1");
}
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}

AC

T3 洗衣

用f(i)表示第i棵树的值的话,会发现    f(i)=f(i-1)+f(i-2)+一坨奇怪的东西
这坨奇怪的东西大概是某棵树中到某个点的距离之和的几个组合方式,

所以你会发现本质问题实际上需要求第i棵树中所有点到第j个点的距离之和
用g[i][j]表示这个东西,那么我们实际上要想办法求g[i][j],那么这个递归的往下用记忆化搜索的方式历来求

 #include <algorithm>
#include <cstdio>
#include <map> #define LL long long const int mod(1e9+);
const int N(); typedef std:: map<std:: pair<LL,LL>, LL> Mm1;
typedef std:: map<LL,LL> Mm2;
Mm1 mm1[N];
Mm2 mm2[N]; inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} LL a[N],b[N],c[N],d[N],l[N];
LL F[N],n[N]; inline LL dis(LL i,LL x,LL y)
{
if(x>y) { LL a=x;x=y;y=a;}
if(x==y) return ;
Mm1::iterator it=mm1[i].find(std::make_pair(x,y));
if(it!=mm1[i].end()) return it->second;
LL na=n[a[i]];
if(x>=na) return mm1[i][std::make_pair(x,y)]=dis(b[i],x-na,y-na)%mod;
else if(y<na) return mm1[i][std::make_pair(x,y)]=dis(a[i],x,y)%mod;
else return mm1[i][std::make_pair(x,y)]=(dis(a[i],x,c[i])+dis(b[i],d[i],y-na)+l[i])%mod;
} inline LL f(LL i,LL j)
{
if(!i) return ;
Mm2:: iterator it=mm2[i].find(j);
if(it != mm2[i].end()) return it->second;
LL na=n[a[i]];
if(j<na) return mm2[i][j]= ( f(a[i],j)+n[b[i]]%mod*
dis(i,j,d[i]+na)%mod+
f(b[i],d[i])) %mod;
else return mm2[i][j]= ( f(b[i],j-na)+n[a[i]]%mod*
dis(i,j,c[i]) %mod+
f(a[i],c[i])) %mod;
} int Presist()
{
freopen("cloth.in","r",stdin);
freopen("cloth.out","w",stdout);
int m; scanf("%d",&m);
F[]=; n[]=;
for(int i=; i<=m; ++i)
{
read(a[i]),read(b[i]),read(c[i]),read(d[i]),read(l[i]);
n[i]=n[a[i]]+n[b[i]]; l[i]%=mod;
LL na=n[a[i]]%mod, nb=n[b[i]]%mod;
printf("%I64d\n",F[i]=( F[a[i]]+F[b[i]]+
nb*f(a[i],c[i])%mod+
na*f(b[i],d[i])%mod+
na*nb %mod*l[i]%mod)%mod);
}
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}

AC

2017-10-29-afternoon-清北模拟赛的更多相关文章

  1. 2017.10.1 国庆清北 D1T1 zhx的字符串题

    题目背景 2017国庆清北D1T1 题目描述 你是能看到第一题的 friends 呢. ——hja 何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为 字符串定义了新的权值计算方法 ...

  2. 2017.10.3北京清北综合强化班DAY3

    括号序列(bracket) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...

  3. 2017.10.4北京清北综合强化班DAY4

    财富(treasure) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...

  4. 2017.10.7北京清北综合强化班DAY7

    1.计数 (count.cpp/c/pas) 时间限制:1s 内存限制:256MB [问题描述] 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍 ...

  5. 2017.10.6北京清北综合强化班DAY6

    题目大意:改变一个数的位置 把一个序列变成不下降序列 题解: 设置一个pre,如果破坏单调性,就把‘删除’这个.否则把pre修改为当前元素的值. 考试时这样得了90分,是因为我的做法只能过这样的数据 ...

  6. 2017.10.5北京清北综合强化班DAY5

    拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...

  7. 2017.10.1北京清北综合强化班DAY1

    a[问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx. 何大爷今天为字符串定义了新的权值计算方法.一个字符串 由小写字母组成,字符串 ...

  8. 2017.10.4 国庆清北 D4T2 正方形

    题目描述 在一个10000*10000的二维平面上,有n颗糖果. LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果! 事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖 ...

  9. 2017.10.6 国庆清北 D6T2 同余方程组

    题目描述 求关于x 的同余方程组 x%a1 = b1 x%a2 = b2 x%a3 = b3 x%a4 = b4 的大于等于0 的最小整数解. 输入输出格式 输入格式: 一行8 个整数,表示a1; b ...

  10. 2017.10.6 国庆清北 D6T1 排序

    题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. 比如a 序列 ...

随机推荐

  1. kettle 增量同步

    http://www.cnblogs.com/inuyasha1027/p/Kettle_update_timestamp.html https://ask.hellobi.com/blog/yugu ...

  2. HBase0.94.2-cdh4.2.0需求评估测试报告1.0之一

    hbase是bigtable的开源山寨版本.是建立的hdfs之上,提供高可靠性.高性能.列存储.可伸缩.实时读写的数据库系统.它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的r ...

  3. Leetcode34--->Search for a Range(在排序数组中找出给定值出现的范围)

    题目:给定一个排序数组,找出给定的target值出现的范围:算法复杂度要求在O(logn);如果没有找到,则返回[-1, -1]; 举例: For example,Given [5, 7, 7, 8, ...

  4. java环境配置classpath和path变量的作用及设置方法

    1.path:指定cmd中命令执行文件所在的路径.比如javac.java两个可执行文件在jdk的bin目录下,如果path值含有这个bin目录,在cmd下执行这两个命令的时候就会到path指定的目录 ...

  5. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  6. [OJ#15]TR #2 画心

    [OJ#15]TR #2 画心 试题描述 渠是一名画师.渠有一支神奇的画笔,可以画尽因果. 渠要画一幅画,这幅画由N个线段组成,线段从1开始编号,第i条线段有一个特殊的因果值Ai. 由于画太长了,渠不 ...

  7. 算法复习——1D/1Ddp优化

    搬讲义~~~~ 题目1:玩具装箱(bzoj1010) Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一 ...

  8. [CQOI2010] 扑克牌 (二分答案,巧解)

    Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套 ...

  9. Java面试题之Java中==和equals()和hashCode()的区别

    “==”: ==是运算符,用来比较两个值.两个对象的内存地址是否相等: “equals()”: equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现 ...

  10. 【bzoj2216】[Poi2011]Lightning Conductor 1D1D动态规划优化

    Description 已知一个长度为n的序列a1,a2,…,an.对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs ...