第十三届蓝桥杯大赛软件赛省赛CC++大学B组

2024-04-09 1062阅读

第十三届蓝桥杯大赛软件赛省赛CC++ 大学 B 组

文章目录

  • 第十三届蓝桥杯大赛软件赛省赛CC++ 大学 B 组
    • 1、九进制转十进制
    • 2、顺子日期
    • 3、刷题统计
    • 4、修建灌木
    • 5、x进制减法
    • 6、统计子矩阵
    • 7、积木画
    • 8、扫雷
    • 9、李白打酒加强版
    • 10、砍竹子

      1、九进制转十进制

      第十三届蓝桥杯大赛软件赛省赛CC++大学B组

      计算器计算即可。2999+29+2。

      2、顺子日期

      第十三届蓝桥杯大赛软件赛省赛CC++大学B组

      简单的枚举一下2022年的日期即可,注意遇到20220123,判断为一个即可。

      #include
      #define ll long long
      using namespace std;
      int ans=0;
      int d[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
      int main(){
      	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
      	for(int i=1;i
      		for(int j=1;j
      			int date[]={2,i/10,i%10,j/10,j%10};
      			for(int k=0;k
      				if(date[k]+1==date[k+1]&&date[k+1]+1==date[k+2]){
      					ans++;
      					break;
      				}
      			}
      		}
      	}
      	cout
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	cinab>n;
      	ll x=(5*a+2*b);
      	ll y=(n/x);// 坐满了几周,7*y 
      	ll z=(n%x);// 还剩的题数 
      	if(z
      		if(z%a==0){
      			z=z/a;
      		}else{
      			z=z/a+1;
      		}
      		cout
      		if((z-5*a)%b==0){
      			z=(z-5*a)/b;
      		}else{
      			z=(z-5*a)/b+1;
      		}
      		cout
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	cinn;
      	/*
      		n=3
      		未剪   修剪后 	位置
      		111 - 011      1
      		122 - 101 		2
      			
      		212 - 210		3
      		321 -> 301		2
      		412 -> 012		1
      		123 -> 103 		2
      		214 -> 210		3		
      		可以看到出现了循环情况,也就说从左向右和从右向左,的最大值是就是步长的2倍 
      	*/
      	for(int i=1;i
      		cout
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	cinn;
      	// 从高位县向低位输入,避免造成位数不相同 
      	cinma;
      	for(ll i=ma;i=1;i--)cin>>a[i];
      	cin>>mb;
      	for(ll i=mb;i>=1;i--)cin>>b[i];
      	/*
      		x进制类比一下 十进制 
      		比如 123 就是 1*10*10+2*10+3
      		那么x进制的:
      		每一位的进制:11 5 2
      		每一位的数字:10 4 1
      		那么这个x进制对应的十进制不就是:10*5*2+4*2+1 
      	*/
      	// A >= B 	
      	// 进制: 11 5 2  
      	// 10 4 0  10*5*2+4*2+0=108
      	// 1  2 0  1*5*2+2*2+0=14   108-14=94
      	// 所以说最小的数位上的进制应该就是a[i]和b[i]这个数位的值+1 
      	// 也就是说正好要进位的时候能得到最小值
      	// 我们就使用p[i]来储存每个位上应该是什么进制 
      	for(ll i=1;i
      		p[i]=max((ll)2,max(a[i],b[i])+1);
      	}
      	p[0]=1;
      	ll ans=0;
      	for(int i=ma;i=1;i--){ 
      		// 为什么需要ans+a[i]+b[i]就能计算这个结果了?
      		// 我们可以用两个十进制的数写一下,我们会发现ans其实就是最高位上没减完的数,然后加到下一位上了
      		ans=(ans+a[i]-b[i])*p[i-1]%mod;
      	}
      	cout
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	cinn>>m>>k;
      	memset(prefix,0,sizeof(prefix));
      	memset(mp,0,sizeof(mp));
      	for(int i=1;i	 
      			cinmp[i][j];
      			prefix[i][j]=prefix[i-1][j]+prefix[i][j-1]+mp[i][j]-prefix[i-1][j-1];
      		}
      	
      	for(int x1=1;x1
      		for(int y1=1;y1
      			for(int x2=x1;x2
      				for(int y2=y1;y2
      					// s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]
      					ll res=prefix[x2][y2]-prefix[x2][y1-1]-prefix[x1-1][y2]+prefix[x1-1][y1-1];
      					if(res
          int n;
          cin  n;
          res[0] = 1;
          ll sum = 0;
          for(int i = 1, j = -2 ; i 
              res[i] = res[i-1];
              if(i = 2) res[i] += res[i-2], res[i] %= mod;
              if(j = 0) sum += res[j], sum %= mod;
              res[i] += sum 0,0,1,-1,1,-1,1,-1};
      int dy[]={1,-1,0,0,1,-1,-1,1};
      bool isnmp(int x,int y){
      	return x
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	cinnm;
      	for(int i=0;i
      		for(int j=0;j
      			if(mp[i][j]==1){
      				ans[i][j]=9;	
      			}else{
      				int rs=0;
      				for(int k=0;k
      					int nx=i+dx[k],ny=j+dy[k];
      					if(isnmp(nx,ny))continue;
      					if(mp[nx][ny]==1){
      						rs++;
      					}
      				}
      				ans[i][j]=rs;
      			}
      		}
      	}	
      	for(int i=0;i
      		for(int j=0;j
      	if(n
      	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      	int n,m;cinnm;
      	memset(dp,-1,sizeof(dp));
      	dfs(2,n,m);
      	cout//sqrt只适用于int,所以要自己写一个函数
          ll ans=0,l=1,r=1e9;
      	while(l
      		ll mid=(l+r)1;
      		if(mid*mid
      			l=mid+1;
      		}else{
      			r=mid;
      		}
      	}
          return l-1;
      }
      int main()
      {
      	int n;cinn;
      	ll x=0;
          for(int i=0;i   
          	int y=0;
              cinx;
              while(x1){
                  s[++y]=x;
                  x=sqr(x/2+1);
              }
              ans+=y;
              for(int j=0,k=y;k;j++,k--)a[i][j]=s[k];
          }
          // 检查相邻的数是否相等,若相等则操作次数减1
          for(int j=0;j
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]