蓝桥杯刷题记day1

特殊日期

记一个日期为 yy 年 mm 月 dd 日,统计从 20002000 年 11 月 11 日(含)到 20000002000000 年 11 月 11 日(含),有多少个日期满足年份 yy 是月份 mm 的倍数,同时也是 dd 的倍数。

当年份是 44 的倍数而不是 100100 的倍数或者年份是 400400 的倍数时,这一年是闰年,其他的年份都不是闰年。

#include <iostream>
using namespace std;
bool f(int year){
    return (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
}
int Day[]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int DAY(int year,int month){
    Day[2]=f(year)?29:28;
    return Day[month];
}
int main()
{
  int ans=0;
  for(int year=2000;year<2000000;year++){
       //Day[2]=f(year)?29:28;
            for(int month=1;month<=12;month++){
                if(year%month==0){
                        for(int day=1;day<=DAY(year,month);day++){
                            if(year%day==0)ans++;
                    }
                }
            }
        }//cout<<ans+1;
        cout<<35813063;
  return 0;
}

公约移动

小蓝站在一个 n 行 m 列的方格图中间,方格图的每一个方格上都标有一个正整数。

如果两个相邻方格(上下左右四个方向相邻)内的数的最大公约数大于 11 ,则可以从其中一个方格移动到另一个方格,当然也可以从另一个方格移回第一个方格。

假设小蓝开始时站在第 r 行第 c 列,请问小蓝可以移动到方格图内的多少个方格?

输入

输入的第一行包含两个整数 ,n,m ,用一个空格分隔,表示方格图的行数和列数。

接下来 n 行,每行包含 m 个正整数,相邻整数间用一个空格分隔,依次表示方格图中从第 11 行到第 n 行,每行从第 11 列到第 m 列中的数。

接下来一行包含两个整数 ,r,c,用一个空格分隔,表示小蓝所在的行号和列号。

输出

输出一行包含一个整数,表示答案。

样例输入

3 4
3 6 5 5
2 4 3 5
7 8 3 8
3 2

输出

5

code 

#include <bits/stdc++.h>
using namespace std;
#define int long long
int mp[1000][1000];
bool vis[1000][1000];
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
int cnt=0;
int n,m;
void dfs(int x,int y){
    vis[x][y]=true;//标记(xx,yy)
    cnt++;//cnt放在这里的话,原点也会计入
    for(int i=1;i<=4;i++){
        int xx = x+dx[i];//枚举下一个点
        int yy = y+dy[i];
        if(xx<1||yy<1||xx>n||yy>m||vis[xx][yy]||__gcd(mp[x][y],mp[xx][yy])<=1){
            continue;//检验合法性
        } 
        dfs(xx,yy);//走过该点
        //cnt++;//cnt放这里,不会统计原点,cnt当初始化为1
    }
}

signed main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++){
      for(int j=1;j<=m;j++){
          cin>>mp[i][j];
      }
  }int x,y;
  cin>>x>>y;
  memset(vis,false,sizeof(vis));
  dfs(x,y);
  cout<<cnt<<"\n";
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值