【SinGuLaRiTy-1034】 Copyright (c) SinGuLaRiTy 2017. All Rights Reserved.

度度熊保护村庄

 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 32768/32768 K (Java/Others)

Problem Description

哗啦啦村袭击了喵哈哈村!
度度熊为了拯救喵哈哈村,带着自己的伙伴去救援喵哈哈村去了!度度熊与伙伴们很快的就过来占据了喵哈哈村的各个军事要地,牢牢的守住了喵哈哈村。
但是度度熊发现,这是一场旷日持久的战斗,所以度度熊决定要以逸待劳,保存尽量多的体力,去迎战哗啦啦村的战士。
于是度度熊决定派尽量多的人去休息,但是同时也不能松懈对喵哈哈村的保护。
换句话而言,度度熊希望尽量多的人休息,而且存在一个包围圈由剩下的人组成,且能够恰好的包围住喵哈哈村的所有住房(包括边界)。
请问最多能让多少个人休息呢?

Input

本题包含若干组测试数据。
第一行一个整数n,表示喵哈哈村的住房数量。
接下来n行,每行两个整数(x1[i],y1[i]),表示喵哈哈村的住房坐标。
第n+1行一个整数m,表示度度熊的士兵数量。
接下来m行,每行两个整数(x2[i],y2[i]),表示度度熊伙伴的坐标。
满足:
1<=n,m<=500
-10000<=x1[i],x2[i],y1[i],y2[i]<=10000

Output

请输出最多的人员休息的数目。
如果无法保护整个村庄的话,输出"ToT"

Sample Input

2
1 1
2 2
4
0 0
0 4
4 2
4 0
1
1 1
2
0 0
0 1

Sample Output

1
ToT

解析

首先我们要知道,由于是"包围"村庄,那么用来包围这个村庄的守卫连接的边都不能穿过村庄。如下图所示:在所有满足条件的边中,绿色边的包围方案最佳。

到这时,我们的问题就可以从找最少点变成找最少边——而这一点有非常好办,只要处理出上图这样的样子,给每一个边都赋值为1,求一个最小环就行了。那么问题来了,怎样才能选出满足条件的边呢?显然的是,我们首先需要n^2的枚举两个包围的端点,从而确定一条边,接着才是重点:判断相交。显然,如果对村庄的房子也采用先前的方法m^2枚举,总的时间复杂度是O(n^2*m^2),肯定超时。这时,我们就要稍稍转换一下:如果一条边没有穿过村庄,那么所有的房子一定在它的一侧呀!于是,我们在判定每一条边时,只用枚举m次,看看这m个点是否都在同一侧就行了,如果不在同一侧,就去掉这条边。经过这个O(n^2*m)的判定过程,我们就可以处理出仅包含可行边的图,接下来跑一次最短路就可以啦。其它的问题嘛:就要看看代码实现了。

好吧,还是提一下关于"判定线段是否相交"的问题,有两个试验:快速排斥实验和跨立实验,通过这两个试验可以在不求交点的情况下快速判断线段是否相交。那么怎么实现呢?网上的博客有很多,自己去查吧!

度度熊的王国战略

 Time Limit: 40000/20000 MS (Java/Others)   Memory Limit: 32768/132768 K (Java/Others)

Problem Description

度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族。
哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士。
所以这一场战争,将会十分艰难。
为了更好的进攻哗啦啦族,度度熊决定首先应该从内部瓦解哗啦啦族。
第一步就是应该使得哗啦啦族内部不能同心齐力,需要内部有间隙。
哗啦啦族一共有n个将领,他们一共有m个强关系,摧毁每一个强关系都需要一定的代价。
现在度度熊命令你需要摧毁一些强关系,使得内部的将领,不能通过这些强关系,连成一个完整的连通块,以保证战争的顺利进行。
请问最少应该付出多少的代价。

Input

本题包含若干组测试数据。
第一行两个整数n,m,表示有n个将领,m个关系。
接下来m行,每行三个整数u,v,w。表示u将领和v将领之间存在一个强关系,摧毁这个强关系需要代价w
数据范围:
2<=n<=3000
1<=m<=100000
1<=u,v<=n
1<=w<=1000

Output

对于每组测试数据,输出最小需要的代价。

Sample Input

2 1
1 2 1
3 3
1 2 5
1 2 4
2 3 3

Sample Output

1
3

解析

由题意得,对于本来就不是强连通图的数据,我们直接输出"0"就行了。对于另外的大部分情况,我们很容易发现:只要将边权和最小的点从图中删去就行了。在实现过程中,可以考虑使用并查集(谁说图论题就一定要建一个图)。

Code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<cstdlib>
  7.  
  8. using namespace std;
  9.  
  10. int sum[],ufs[];
  11.  
  12. int Find(int x)
  13. {
  14. if(ufs[x]==)
  15. return x;
  16. return ufs[x]=Find(ufs[x]);
  17. }
  18.  
  19. int main(void)
  20. {
  21. int n,m,i,x,y,z,cnt,t1,t2;
  22. while(scanf("%d%d",&n,&m)!=EOF)
  23. {
  24. cnt=n-;
  25. memset(ufs,,sizeof(ufs));
  26. memset(sum,,sizeof(sum));
  27. for(i=;i<=m;i++)
  28. {
  29. cin>>x>>y>>z;
  30. if(x==y)
  31. continue;
  32. sum[x]+=z;
  33. sum[y]+=z;
  34. t1=Find(x);
  35. t2=Find(y);
  36. if(t1!=t2)
  37. {
  38. ufs[t1]=t2;
  39. cnt--;
  40. }
  41. }
  42. if(cnt==)
  43. {
  44. sort(sum+,sum+n+);
  45. printf("%d\n",sum[]);
  46. }
  47. else
  48. printf("0\n");
  49. }
  50. return ;
  51. }

度度熊与邪恶大魔王

 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 32768/32768 K (Java/Others)

Problem Description

度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。
邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力。
度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害。
当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效。
如果怪兽的生命值降为0或以下,那么怪兽就会被消灭。
当然每个技能都可以使用无限次。
请问度度熊最少携带多少晶石,就可以消灭所有的怪兽。

Input

本题包含若干组测试数据。
第一行两个整数n,m,表示有n个怪兽,m种技能。
接下来n行,每行两个整数,a[i],b[i],分别表示怪兽的生命值和防御力。
再接下来m行,每行两个整数k[i]和p[i],分别表示技能的消耗晶石数目和技能的伤害值。
数据范围:
1<=n<=100000
1<=m<=1000
1<=a[i]<=1000
0<=b[i]<=10
0<=k[i]<=100000
0<=p[i]<=1000

Output

对于每组测试数据,输出最小的晶石消耗数量,如果不能击败所有的怪兽,输出-1

Sample Input

1 2
3 5
7 10
6 8
1 2
3 5
10 7
8 6

Sample Output

6
18

解析

注意到防御值最大才为10,所以肯定是用防御力来遍历。设dp[j][i]为防御力为 i ,打出 j点伤害以上时所需的最少晶石。
对于第u个技能来说,如果p[u]<= i,说明根本打不出伤害,不用管。
反之,伤害则为 dmg=p[u]-i, 这时候 又有两种情况:
如果dmg>=j,说明靠这一个技能就够打出足够伤害了,那么肯定是用消耗晶石最少的那个技能,dp[j][i]=min{k[u]};
反之,光靠这个技能不足以打出足够的伤害,那么就需要借助前面的dp值来计算,dp[j-dmg][i]代表同在i防御力,打出j-dmg的伤害的最少晶石,因为dp[j-dmg][i]数量的晶石已经可以打出 j-dmg 的伤害了,此时再加上这第u个技能的伤害,就可以打到 j 以上,晶石数则为dp[j-dmg][i]+k[u],与上面一样,因为不知道哪个技能消耗的晶石最少,所以这里也取一个最小值。

Code

  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cstdio>
  5.  
  6. #define mem(a,b) memset(a,b,sizeof(a))
  7. using namespace std;
  8. typedef long long LL;
  9. const int maxn=+;
  10. const int maxm=+;
  11.  
  12. LL a[maxn],b[maxn];
  13. LL k[maxm],p[maxm];
  14. LL dp[maxm][];
  15.  
  16. LL max(LL a,LL b)
  17. {
  18. return a>b?a:b;
  19. }
  20. LL min(LL a,LL b)
  21. {
  22. return a<b?a:b;
  23. }
  24.  
  25. int main()
  26. {
  27. int n,m;
  28. while(scanf("%d%d",&n,&m)!=EOF)
  29. {
  30. LL up1=,up2=,hp=;
  31. for(int i=; i<n; i++)
  32. {
  33. scanf("%I64d%I64d",&a[i],&b[i]);
  34. up1=max(up1,b[i]);
  35. hp=max(hp,a[i]);
  36. }
  37.  
  38. for(int i=; i<m; i++)
  39. {
  40. scanf("%I64d%I64d",&k[i],&p[i]);
  41. up2=max(up2,p[i]);
  42. }
  43. if(up1>=up2)
  44. {
  45. printf("-1\n");
  46. continue;
  47. }
  48. mem(dp,);
  49. for(int i=; i<=; i++)
  50. {
  51. for(int j=;j<=hp;j++)
  52. {
  53. dp[j][i]=1e18;
  54. for(int u=;u<m;u++)
  55. {
  56. LL dmg=p[u]-i;
  57. if(dmg<=)
  58. continue;
  59. if(dmg>=j)
  60. {
  61. dp[j][i]=min(dp[j][i],k[u]);
  62. }
  63. else
  64. {
  65. dp[j][i]=min(dp[j][i],dp[j-dmg][i]+k[u]);
  66. }
  67. }
  68. }
  69. }
  70. LL ans=;
  71. for(int i=;i<n;i++)
  72. {
  73. ans+=dp[a[i]][b[i]];
  74. }
  75. printf("%I64d\n",ans);
  76.  
  77. }
  78. return ;
  79. }

度度熊的午饭时光

 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 32768/32768 K (Java/Others)

Problem Description

度度熊最期待每天的午饭时光,因为早饭菜品清淡,晚饭减肥不敢吃太多(胖纸的忧伤T.T)。
百度食堂的午餐超级丰富,祖国各大菜系应有尽有,度度熊在每个窗口都有爱吃的菜品,而且他还为喜爱的菜品打了分,吃货的情怀呀(>.<)。
但是,好吃的饭菜总是很贵,每天的午饭预算有限,请帮度度熊算一算,怎样打饭才能买到的最好吃的饭菜?(不超过预算、不重样、午餐等分最高的情况下,选择菜品序号加和最小,加和相等时字典序最小的组合)

Input

第一行一个整数T,表示T组数据。 每组测试数据将以如下格式从标准输入读入:
B
N
score_1 cost_1
score_2 cost_2
:
score_N cost_N
第一行,正整数B(0 <= B <= 1000),代表午餐的预算。
第二行,正整数N (0 <= N <= 100),代表午餐可选的菜品数量
从第三行到第 (N + 2) 行,每行两个正整数,以空格分隔,score_i表示菜品的得分,cost_i表示菜品的价格(0 <= score_i, cost_i <= 100)。

Output

对于每组数据,输出两行: 第一行输出:"Case #i:"。i代表第i组测试数据。 第二行输出菜品的总得分和总花费,以空格分隔。 第三行输出所选菜品的序号,菜品序号从1开始,以空格分隔。

Sample Input

2
29
6
9 10
3 4
6 5
7 20
10 9
15 11
0
2
2 23
10 12

Sample Output

Case #1:
34 29
2 3 5 6
Case #2:
0 0

解析

读完题,应该都可以看出这是一道01背包。DP的方程式都是模板,不解释了。这题的所谓的"不同之处"就在于要求求出DP的路径,其实也和简单,对于dp[i][j]的每一个状态,都对应一个vis[i][j]来记录到达这一状态的路径就可以了,在DP过程中边递推,边维护,最后再顺着一个一个printf出来就可以了。

Code

  1. #include<cstring>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<cstdlib>
  6. #include<iostream>
  7.  
  8. #define INF 0x3f3f3f3f
  9.  
  10. using namespace std;
  11.  
  12. typedef long long ll;
  13.  
  14. const ll mod=1e9+;
  15.  
  16. struct meal
  17. {
  18. int score,cost;
  19. }a[];
  20.  
  21. bool ans[];
  22. int dp[];
  23. bool vis[][];
  24.  
  25. int main()
  26. {
  27. int T,Case=;
  28. cin>>T;
  29. while(T--)
  30. {
  31. int b,n;
  32. cin>>b>>n;
  33. for(int i=;i<=n;i++)
  34. cin>>a[i].score>>a[i].cost;
  35. memset(dp,,sizeof(dp));
  36. memset(vis,false,sizeof(vis));
  37. memset(ans,,sizeof(ans));
  38. for(int i=;i<=n;i++)
  39. {
  40. for(int j=b;j>=;j--)
  41. {
  42. if(j>=a[i].cost)
  43. {
  44. if(dp[j]<dp[j-a[i].cost]+a[i].score)
  45. {
  46. dp[j]=dp[j-a[i].cost]+a[i].score;
  47. vis[i][j]=true;
  48. }
  49. else
  50. vis[i][j]=false;
  51. }
  52. }
  53. }
  54. int p=b,cnt=;
  55. for(int i=n;i>=;i--)
  56. {
  57. if(vis[i][p])
  58. {
  59. ans[i]=true;
  60. p-=a[i].cost;
  61. cnt++;
  62. }
  63. }
  64. int ANS=;
  65. for(int i=;i<=n;i++)
  66. {
  67. if(ans[i])
  68. ANS+=a[i].cost;
  69. }
  70. printf("Case #%d:\n",Case++);
  71. printf("%d %d\n",dp[b],ANS);;
  72. for(int i=;i<=n;i++)
  73. {
  74. if(ans[i])
  75. {
  76. cout<<i;
  77. if(--cnt)
  78. cout<<" ";
  79. else
  80. cout<<endl;
  81. }
  82. }
  83. }
  84. return ;
  85. }

寻找母串

 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 32768/32768 K (Java/Others)

Problem Description

对于一个串S,当它同时满足如下条件时,它就是一个01偏串: 1、只由0和1两种符组成; 2、在S的每一个前缀中,0的个数不超过1的个数; 3、S中0的个数和1的个数相等。
现在给定01偏串S,请计算一下S在所有长度为n的01偏串中作为子串出现的次数的总和。 由于结果比较大,结果对1e9+7取余后输出。
样例解释: 在第二个样例中,长度为4的偏串共两个1010,1100。10在1010中出现了两次,在1100中出现了1次。所以答案是3。

Input

第一行给出一个整数T(1<=T<=40),表示测试数据的数目。 每一组测试包含一个整数n和字符串S,中间用空格分开。(1<=|S|<=100000,1<=n<=1000000000)
输入保证S是一个01偏串。

Output

对于每一组数据,输出一个整数占一行,表示答案。

Sample Input

2
2 10
4 10

Sample Output

1
3

解析

首先,写一个暴力,观察观察——这一看不得了,似乎有规律!我们发现,固定好n,只要字符串的长度固定,无论字符串的内容是什么,答案都是一样的。接着再继续深入地研究一下,我们竟然发现答案就是

接下来,我们将它化简,可以得到:原式=F((n-|S|)/2+1)*((n-|S|)/2+1+1)/2。其中的F(n)指的就是卡特兰数列的第n项。我们又会欣喜地发现:卡特兰数列有O(n)的递推公式!

不过我们高兴的太早了:这里的n可是很大的,这么大的n,一个数组也开不下呀。于是我们就要用到分块的思想:n不是有很大吗,我们把1~(n-|S|)/2+1)的大区间划分成许多个小区间,后台暴力打表搞出第100000,200000,300000......500000000个卡特兰数,接着判断输入的 (n-|S|)/2+1)在哪一个区间里,再直接在这个区间里面递推,这样单次的递推的时间复杂度就变为了O(100000)。注意,由于在计算答案时数据可能会比较大,需要用到乘法逆元,不过这很好办,稍稍观察就会发现,所求的逆元的值恒为500000004,直接代入就行了。

另外大家还要注意两点: 1>对于n<|S|这一类情况,要提前特判输"0";2>对于n%2!=0的情况,也要特判输"0",因为01串要满足0和1的个数相同,那么长度一定为偶数。表示本人为此WA掉了20多次......qwq。

Code

  1. #include<cstring>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<iostream>
  6. #include<cstdlib>
  7.  
  8. #define ll long long
  9. #define mod 1000000007
  10. #define inverse_element 500000004
  11.  
  12. using namespace std;
  13.  
  14. int c[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
  15.  
  16. ll Pow(ll a,ll b)
  17. {
  18. ll sum=;
  19. while(b)
  20. {
  21. if(b%)
  22. sum=sum*a%mod;
  23. a=a*a%mod;
  24. b/=;
  25. }
  26. return sum;
  27. }
  28.  
  29. int n;
  30. char S[];
  31.  
  32. int main()
  33. {
  34. int T;
  35. cin>>T;
  36. for(int t=;t<=T;t++)
  37. {
  38. memset(S,,sizeof(S));
  39. cin>>n;
  40. cin>>S;
  41. int len=strlen(S);
  42. if(n<len||n%!=)
  43. {
  44. cout<<""<<endl;
  45. continue;
  46. }
  47. ll tool=(n-len)/+;
  48. int i;
  49. for(i=;i<=;i++)
  50. {
  51. if(i*>tool)
  52. {
  53. break;
  54. }
  55. }
  56. ll now=c[i-];
  57. for(ll j=(i-)*+;j<=tool;j++)
  58. {
  59. now=*(*j-)%mod*now%mod*Pow(j+,mod-)%mod;
  60. }
  61. ll ans=now%mod*(((tool+)%mod*inverse_element)%mod)%mod;
  62. cout<<ans<<endl;
  63. }
  64. return ;
  65. }

Time: 2017-08-06

[SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛的更多相关文章

  1. hdu 6082 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛 )

    度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛A

    [SinGuLaRiTy-1036] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 小C的倍数问题 Time Limit: 2000/100 ...

  3. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛B

    [SinGuLaRiTy-1037] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Chess Time Limit: 2000/1000 ...

  4. [SinGuLaRiTy] 2017 百度之星程序设计大赛 复赛

    [SinGuLaRiTy-1038] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Arithmetic of Bomb Problem D ...

  5. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  6. 2017"百度之星"程序设计大赛 - 资格赛

    度度熊与邪恶大魔王  Accepts: 3666  Submissions: 22474  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  7. 2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)

    度度熊与邪恶大魔王 思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了) ...

  8. 2017"百度之星"程序设计大赛 - 资格赛 寻找母串

    Problem Description 对于一个串S,当它同时满足如下条件时,它就是一个01偏串: 1.只由0和1两种符组成: 2.在S的每一个前缀中,0的个数不超过1的个数: 3.S中0的个数和1的 ...

  9. 2017"百度之星"程序设计大赛 - 资格赛 度度熊的王国战略

    度度熊的王国战略 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更好的进攻哗啦啦族,度度 ...

随机推荐

  1. iOS系统架构和Object-C基本数据类型(1)

    iOS系统架构 基本数据类型 思维导图  下载 注:打开思维导图的软件:Mindjet MindManager 9

  2. (转)C# -- 扩展方法的应用(Extension Methods)

    本文转载自:http://blog.csdn.net/zxz414644665/article/details/9793205 当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添 ...

  3. 【转】hurry_liu 大神STM32移植contiki入门之一:系统介绍和开发环境搭建

    前言: 由于项目的原因,需要在LPC1788(STM32 cortex-M3)上面跑contiki. 之前没有涉及到contiki,不知其为何物.不过这个不是难事,做IT的,每每遇到新事物,都不会处理 ...

  4. 嵌入式系统LINUX环境搭建

    Linux kernel Complier: http://supportopensource.iteye.com/blog/680483 sudo make mrproper         净化解 ...

  5. RVO和NRVO

    返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用户返回,那么这个临时对象会消耗一个构造函数(C ...

  6. c++ 端口扫描程序

    第一.原理 端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则代表端口开发者,否则端口关闭. 所有需要多socket程序熟悉,本内容是在window环境下 ...

  7. Python命令模块argparse学习笔记(二)

    argparse模块可以设置两种命令参数,一个是位置参数,一个是命令参数 位置参数 import argparse parser = argparse.ArgumentParser(descripti ...

  8. 获取Linux权限后安装rootkit

    1.首先获得远程服务器的root权限,当然这是基本的也是最难的. 2.然后下载rootkit程序,本文用到的是mafix. 3.开始安装 wget http://godpock.googlecode. ...

  9. 第四天:servlet的生命周期和一些细节问题

    1.  servlet的生命周期: a)  流程 i.  Web服务器首先会检查是否装载了该servlet的实例对象.如果装载了直接进行第四步. ii.  装载并创建该servlet的实例对象. ii ...

  10. spring整合web项目演示