2017百度之星初赛(A)1001,1005,1006解题报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017百度之星初赛(A)1001,1005,1006解题报告相关的知识,希望对你有一定的参考价值。

1001 小C的倍数问题

纯签到题,求p-1的因数个数,暴力枚举即可

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     ios::sync_with_stdio(false);
 6     int t,p,cnt,n,num;
 7     cin>>t;
 8     while(t--)
 9     {
10         cnt=0;
11         cin>>p;
12         n=p-1;
13         for(int i=1;i*i<=n;++i){
14             if(n%i==0){
15                 cnt++;
16                 if(i*i!=n)
17                     cnt++;
18             }
19         }
20         cout<<cnt<<endl;
21     }
22     return 0;
23 }
View Code

1005 今夕何夕

利用蔡勒公式,可以知道任何一天的星期数,特判一下闰年的2.29就可以了。枚举年数

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int Cal(int y,int m,int d)
 4 {
 5     int c,w;
 6     bool flag=false;
 7     if(y%400==0||(y%4==0&&y%100!=0))
 8         flag=true;
 9     if(flag==false&&m==2&&d==29)
10         return -1;
11     if(m<=2){
12         y--;
13         m+=12;
14     }
15     c=y/100;
16     y%=100;
17     w=y+y/4+c/4-2*c+13*(m+1)/5+d-1;
18     while(w<0)
19         w+=7;
20     w%=7;
21     return w;
22 }
23 int main()
24 {
25     //freopen("in.txt","r",stdin);
26     int t,y,m,d,w,c,n;
27     scanf("%d",&t);
28     while(t--)
29     {
30         scanf("%d-%d-%d",&y,&m,&d);
31         w=Cal(y,m,d);
32         while(1)
33         {
34             ++y;
35             n=Cal(y,m,d);
36             if(w==n)
37                 break;
38         }
39         printf("%d\n",y);
40     }
41     return 0;
42 }
View Code

1006 度度熊的01世界

把第一个遇到的1用dfs赋值为2,然后扫一遍图看是否有1,如果有就说明有多块1,输出-1。 
然后再把图扫一遍,碰到0就进去dfs。如果在任何一次整个dfs过程中没有碰到边界,说明这一块0是被1包围的。然后再继续找,如果有多个0被1包围,则输出-1,如果只有一个输出0,一个都没有输出1。

技术分享
  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 const int maxn=110;
  4 char g[maxn][maxn];
  5 int n,m;
  6 int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
  7 bool visit[maxn][maxn];
  8 bool flag_1;
  9 bool check(int x,int y)
 10 {
 11     if(x<1||x>n||y<1||y>m)
 12         return false;
 13     return true;
 14 }
 15 void dfs(int x,int y)
 16 {
 17     int dx,dy;
 18     g[x][y]=2;
 19     visit[x][y]=false;
 20     for(int i=0;i<4;++i){
 21         dx=x+dis[i][0];
 22         dy=y+dis[i][1];
 23         if(check(dx,dy))
 24             if(g[dx][dy]==1&&visit[dx][dy])
 25                 dfs(dx,dy);
 26     }
 27 }
 28 bool solve1()
 29 {
 30     for(int i=1;i<=n;++i)
 31         for(int j=1;j<=m;++j){
 32             if(g[i][j]==1){
 33                 return false;
 34             }
 35         }
 36     return true;
 37 }
 38 void Searc(int x,int y)
 39 {
 40     visit[x][y]=false;
 41     int dx,dy;
 42     for(int i=0;i<4;++i){
 43         dx=x+dis[i][0];
 44         dy=y+dis[i][1];
 45         if(check(dx,dy)){
 46             if(visit[dx][dy])
 47                 Searc(dx,dy);
 48         }
 49         else
 50             flag_1=false;
 51     }
 52 }
 53 bool is_one()
 54 {
 55 
 56     for(int i=1;i<=n;++i)
 57         for(int j=1;j<=m;++j){
 58             if(g[i][j]==0&&visit[i][j]){
 59                 flag_1=true;
 60                 Searc(i,j);
 61                 if(flag_1)
 62                     return true;
 63             }
 64         }
 65     return false;
 66 }
 67 int main()
 68 {
 69     ios::sync_with_stdio(false);
 70     //freopen("in.txt","r",stdin);
 71     while(cin>>n>>m)
 72     {
 73         memset(g,0,sizeof(g));
 74         memset(visit,true,sizeof(visit));
 75         for(int i=1;i<=n;++i)
 76             cin>>g[i]+1;
 77         bool flag=false;
 78         for(int i=1;i<=n;++i){
 79             for(int j=1;j<=m;++j)
 80                 if(g[i][j]==1){
 81                     flag=true;
 82                     dfs(i,j);
 83                     break;
 84                 }
 85             if(flag)
 86                 break;
 87         }
 88         if(flag==false||(!solve1())){
 89             cout<<-1<<endl;
 90             continue;
 91         }
 92         if(!is_one())
 93             cout<<1<<endl;
 94         else if(is_one())
 95             cout<<-1<<endl;
 96         else
 97             cout<<0<<endl;
 98     }
 99     return 0;
100 }
View Code

 


以上是关于2017百度之星初赛(A)1001,1005,1006解题报告的主要内容,如果未能解决你的问题,请参考以下文章

百度之星初赛签到(1001/1005)

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

百度之星2017初赛A

2016-5-21 letwetell Round3 (百度之星初赛,dfs序)

(最小费用流)hdu 6118(2017百度之星初赛B 1005) 度度熊的交易计划

百度之星初赛2A 1001 ALL X(HDU 5690)