随笔分类 -  SCNU SUMMER TRAINING #4

B. Binary Operations
摘要:题目链接:戳这里记n个数为a[0],a[1],...,a[n-1],由于取的是连续片段,故我们可以以末尾元素为分类依据进行讨论。显然,以a[i](i=0,...,n-1)为末尾的子序列有i+1个,分别为:a[i],a[i-1]a[i],...,a[0]a[1]...a[i].故总的个数为all=1+2+...+n=n*(n+1)/2.考虑到a[i](i=0,...,n-1)的取值范围为[0,10^9] 2 #include 3 using namespace std; 4 5 int main(){ 6 int T,t,i,j; 7 long long n,temp=1,a[... 阅读全文

posted @ 2013-07-29 16:14 SCNUACM 阅读(223) 评论(0) 推荐(0)

F. Journey
摘要:题目链接:这儿题目大意:给一棵树T,每条边都有一个权值,然后又一条新增边,多次询问:从点x到点y在T上走的最短距离,在加上那条新增边之后,最短距离可以减少多少。思路:任意确定一个根root,DFS计算每个点到根的距离dis[],然后每两点间的最短距离为 dis[x]+dis[y]-2*dis[LCA(x,y)]。若新加入一条边u--v,那么如果我们必须经过u--v,那么从x到y的最短距离就为 dis(x,u)+dis(u,v)+dis(v,y)或dis(x,v)+dis(v,u)+dis(u,y)。这样在线处理答案就行。PS:至于求LCA的方法可以参考2007年郭华阳的论文《RMQ&L 阅读全文

posted @ 2013-07-28 17:02 SCNUACM 阅读(320) 评论(0) 推荐(0)

D. Divide
摘要:题目链接:戳这里思路:用一个数组记录下每个二进制位上的值,满2进位,从高位到低位扫一遍,找到不能被均分的最高位(当前位为1而且不是进位获得的),该位置代表的值减去比它低位的值就是答案了AC Code: 1 #include 2 #include 3 #include 4 #define LL long long 5 const long M=110000; 6 LL pos[M],JinWei[M],ans[M],max_pos; 7 long n,t; 8 int main(){ 9 scanf("%d",&t);10 for (long l=1;l1){26 . 阅读全文

posted @ 2013-07-28 16:57 SCNUACM 阅读(224) 评论(0) 推荐(0)

C. Counting Pair
摘要:题目链接:戳这里题意:男生编号1~N,女生编号1~M,给一个sum,问有多少对男女编号加起来等于sum思路:若sum≤min(n,m),那么有sum-1对(1&sum-1、2&sum-2……);若sum>max(n,m),那么有N+M-sum+1对(N&sum-N、N-1&sum-N+1……sum-M&M);否则有min(n,m)对(设n≤m,1&N-1、2&n-2……)AC Code: 1 #include 2 #include 3 using namespace std; 4 5 int main() { 6 int T, n, m, 阅读全文

posted @ 2013-07-28 16:54 SCNUACM 阅读(139) 评论(0) 推荐(0)

A. A Big Dinner
摘要:题目链接:猛戳这儿题意:求三个数的全排列AC Code: 1 #include 2 #include 3 #include 4 using namespace std; 5 long a[10],t; 6 long cmp(long x,long y){ 7 return x<y; 8 } 9 int main(){10 scanf("%d",&t);11 for (long i=1;i<=t;++i){12 for (long j=1;j<=3;++j)13 scanf("%d",&a[j]);14 sor... 阅读全文

posted @ 2013-07-28 16:52 SCNUACM 阅读(192) 评论(0) 推荐(0)

导航