百度之星2016初赛之部分题解

All X

Accepts: 1281

Submissions: 7580

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

Problem Description

F(x, m)F(x,m) 代表一个全是由数字xx组成的mm位数字。请计算,以下式子是否成立:

F(x,m)\ mod\ k\ \equiv \ cF(x,m) mod k ≡ c

Input

第一行一个整数TT,表示TT组数据。 每组测试数据占一行,包含四个数字x,m,k,cx,m,k,c

1\leq x\leq 91≤x≤9

1\leq m\leq 10^{10}1≤m≤10?10??

0\leq c< k\leq 10,0000≤c<k≤10,000

Output

对于每组数据,输出两行: 第一行输出:"Case #i:"。ii代表第ii组测试数据。 第二行输出“Yes” 或者 “No”,代表四个数字,是否能够满足题目中给的公式。

Sample Input

3
1 3 5 2
1 3 5 1
3 5 99 69

Sample Output

Case #1:
No
Case #2:
Yes
Case #3:
Yes

Hint

对于第一组测试数据:111 mod 5 = 1,公式不成立,所以答案是”No”,而第二组测试数据中满足如上公式,所以答案是 “Yes”。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <iomanip>
 6 #include <stdlib.h>
 7 using namespace std;
 8 int s[10000009];
 9 int main()
10 {
11     long long n;
12     cin>>n;
13     long long  x,m,k,c;
14     long long num=1;
15     while(n--)
16     {
17         cin>>x>>m>>k>>c;
18
19         s[1]=x%k;
20         int i;
21         for(i=2;i<=10000005;i++)
22         {
23             s[i]=(s[i-1]*10+x)%k;
24             if(s[1]==s[i]) break;
25         }
26         m=m%i;
27         cout<<"Case #"<<num++<<":"<<endl;
28         if(c==s[m]) cout<<"Yes"<<endl;
29         else cout<<"No"<<endl;
30     }
31     return 0;
32 }

瞬间移动

Accepts: 1018

Submissions: 3620

Time Limit: 4000/2000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

Problem Description

有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第nn行第mm列的格子有几种方案,答案对10000000071000000007取模。

Input

多组测试数据。

两个整数n,m(2\leq n,m\leq 100000)n,m(2≤n,m≤100000)

Output

一个整数表示答案

Sample Input

4 5

Sample Output

Copy

10

杨辉三角...找规律...  逆元求组合数  C(m+n-4,m-2)

代码:

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <map>
 8 #include <set>
 9 #include <vector>
10 #include <iostream>
11 using namespace std;
12 #define ll long long
13 #define MOD 1000000007
14 int n,m;
15 long long t1[100010],t2[100010];
16
17 long long  qpow(long long x,long long k)
18 {
19     long long res = 1;
20     while(k){
21         if(k & 1)
22             res=res*x%MOD;
23         x=x*x%MOD;
24         k>>=1;
25     }
26     return res;
27 }
28 long long inv(long long a,long long x)
29 {
30     return qpow(a,x-2);
31 }
32
33 void init()
34 {
35     t1[0]=t1[1]=1;
36     t2[0]=t2[1]=1;
37     for(int i=2; i<100010; i++){
38         t1[i]= (t1[i-1] * i)%MOD;
39         t2[i]= inv(t1[i],MOD);
40     }
41 }
42
43 long long pro(int n,int m)
44 {
45     if(n < m|| m < 0)
46         return 1;
47     return ((t1[n]*t2[m]) % MOD *t2[n-m]) %MOD;
48 }
49
50 int main()
51 {
52     init();
53     while(scanf("%d%d",&n,&m)!=EOF){
54         long long ans=0;
55         for(int i=0; i<= min(n,m)-2; i++){
56             ans=(ans+ ( pro(n-2,i) * pro(m-2,i)) %MOD) %MOD;
57         }
58         printf("%I64d\n",ans);
59
60     }
61      return 0;
62 }

中位数计数

Accepts: 592

Submissions: 3341

Time Limit: 12000/6000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

Problem Description

中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。

现在有nn个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。

Input

多组测试数据

第一行一个数n(n\leq 8000)n(n≤8000)

第二行nn个数,0\leq0≤每个数\leq 10^{9}≤10?9??,

Output

NN个数,依次表示第ii个数在多少包含其的区间中是中位数。

Sample Input

5
1 2 3 4 5

Sample Output

1 2 3 2 1

代码:

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <map>
 8 #include <set>
 9 #include <vector>
10 #include <iostream>
11 using namespace std;
12
13 const double pi=acos(-1.0);
14 double eps=0.000001;
15
16 int aa[8008];
17 int les[8008];
18 int big[8008];
19 int has[8008+8000];
20 int main()
21 {
22
23
24     int n;
25     while(scanf("%d",&n)!=EOF)
26     {
27         int i,j;
28         for (i=1; i<=n; i++)
29         {
30             scanf("%d",&aa[i]);
31         }
32         for (i=1; i<=n; i++)
33         {
34             long long ans=0;
35             memset(has,0,sizeof has);
36             les[i]=0;
37             big[i]=0;
38             for (j=i-1; j>=1; j--)
39             {
40                 if (aa[j]<aa[i]) les[j]=les[j+1]+1;
41                 else les[j]=les[j+1];
42                 if (aa[j]>aa[i]) big[j]=big[j+1]+1;
43                 else big[j]=big[j+1];
44             }
45             for (j=i+1; j<=n; j++)
46             {
47                 if (aa[j]<aa[i]) les[j]=les[j-1]+1;
48                 else les[j]=les[j-1];
49                 if (aa[j]>aa[i]) big[j]=big[j-1]+1;
50                 else big[j]=big[j-1];
51             }
52             for (j=i+1; j<=n; j++)
53             {
54                  int need_big=les[j]-big[j];
55                  has[need_big+8000]++;
56             }
57             has[0+8000]++;
58             for (j=1; j<i; j++)
59             {
60                 ans+=has[big[j]-les[j]+8000];
61             }
62             ans+=has[0+8000];
63             if (i>1)printf(" ");
64             printf("%I64d",ans);
65         }
66
67         printf("\n");
68
69
70     }
71
72         return 0;
73
74     }

时间: 2024-11-03 21:44:48

百度之星2016初赛之部分题解的相关文章

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

百度之星2014初赛第二场

A. Scenic Popularity http://acm.hdu.edu.cn/showproblem.php?pid=4831 思路:景点区会控制休息区的Hot值,我们建立休息区到它最近的景点区的关系,注意处理冲突. 查询和修改都暴力进行,预处理关系,从左到右,然后从右到左遍历一遍即可,更新时候,从被修改的p位置,向两边,与p有关的休息区进行更新.总的时间复杂度O(T*n*K),10^8左右,不到1s可以解决. const int maxn = 10000; const int maxh

【百度之星2014~初赛(第二轮)解题报告】JZP Set

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]JZP Set>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=668 前言 最近要毕业了,有半年

【百度之星2014~初赛解题报告】

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛解题报告]>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=671 前言 最近要毕业了,有半年没做比赛了.这次参加百度

百度之星2014初赛 - 1002 - Grids

先上题目: Grids Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 度度熊最近很喜欢玩游戏.这一天他在纸上画了一个2行N列的长方形格子.他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案.不过画

百度之星2017初赛A-1005-今夕何夕

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 719    Accepted Submission(s): 228 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近

【比赛】百度之星2017 初赛Round A

第一题 题意:给定多组数据P,每次询问P进制下,有多少数字B满足条件:只要数位之和是B的倍数,该数字就是B的倍数. 题解:此题是参考10进制下3和9倍数的特殊性质. 对于10进制,ab=10*a+b=9*a+(a+b),所以9的约数都有此性质. 对于P进制,ab=p*a+b=(p-1)a+(a+b),所以p-1的约数都有此性质. 对于P,计算P-1的约数个数即为答案. 第二题 第三题 第四题 第五题 题意:多组数据,给定年月日,求下一次同月同日为同星期几的年份. 题解:365%7=1,过一年星期

百度之星2016资格赛D,水题

很简单的题,主要是要用字符串哈希,把字符串处理成整数.接下来可以继续用hash,也可以像我一样用个map就搞定了. /* * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #include <algorithm> #in

百度之星 2015 初赛(1) 1002 找连续数

找连续数 Accepts: 401 Submissions: 1911 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的. 现在小度熊增加题目难度,他不想知道是否有这样的 k 的区间,而是想知道有几个这样的 k 的区间. Input