• 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
    ",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
  • 相关阅读:
    [No0000CA]什么是“普瑞马法则”?以及 如何利用“普瑞马法则”,三步克服惰性
    [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2
    [No0000B8]WPF或Winform调用系统Console控制台显示信息
    [No0000B7]If else 与 三元表达式? : 效率对比
    [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1
    [No0000B4].Net中String是引用类型还是值类型,答string是特殊的引用类型
    [No0000B6]C#中 ==与equals的区别
    [No0000B3].NET C# 单体模式(Singleton)
    [No0000AF]去除wpf窗口标题栏ICON
    [No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键
  • 原文地址:https://www.cnblogs.com/SCaryon/p/7374966.html
Copyright © 2020-2023  润新知