第十三届蓝桥杯模拟赛(第一期)题解
(1)
直接从for循环从10000枚举到90000,如果i%128==0,答案就+1;
(2)
这题也是枚举就行。
(3)
奇数位置只能放对应的数字,偶数位置全排列,答案是10的阶乘。
(4)
这道题直接DFS一下就行,答案是4;
#include <bits/stdc++.h> #define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) //const int N=1e6; typedef long long ll; using namespace std; int a[20]={0,1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9}; int ans=INT_MIN; void dfs(int i,int x,int sum)//i为第几步,x为台阶数,sum为得分 { if(i>=7)//超过7步了,不合法 { return; } if(x==15)//到达第15层了 { ans=max(ans,sum); return; } for(int j=1;j<=4;j++) { dfs(i+1,x+j,sum+=a[x+j]); } } int main() { dfs(1,0,0); cout<<ans<<endl; return 0; }
(5)
这题也是枚举。。三层for循环枚举i,j,k。
(6)
(7)
观察易得:行数i+列数j为偶数的被染成黑色。所以答案:奇数行的个数*奇数列的个数+偶数行的个数*偶数列的个数。
(8)
我们直接枚举a[i]-a[i-1],然后让这个长度去除以k,注意特判第一个和最后一个小块。
(9)
思维+组合数,第(n+1)/2一定是最大值n,我们只需要选(n-1)/2放到前面就行,选好了位置也就确定了,注意取模。
#include <bits/stdc++.h> #define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) //const int N=1e6; typedef long long ll; const ll mod=1000000007; using namespace std; ll n; ll C(ll a,ll b) { ll x=1; for(ll i=a,j=1;j<=b;i--,j++) { x=(x*i/j)%mod; } return x; } int main() { cin>>n; n--; ll ans=C(n,n/2); cout<<ans<<endl; return 0; }
(10)
BFS模板题,我们从任意一个1开始bfs,访问的地方都标记掉,bfs完成后,遍历st数组,如果遇到1的位置没有被标记过,一定不连通。
#include <bits/stdc++.h> #define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) const int N=510; typedef long long ll; using namespace std; char a[N][N]; int st[N][N]; int n,m; int wy[4][2]={ {1,0},{-1,0},{0,1},{0,-1}}; int qdx,qdy; struct node{ int x,y; }; queue <node> q; void bfs() { st[qdx][qdy]=1; q.push({qdx,qdy}); while(!q.empty()) { node one=q.front(); q.pop(); for(int i=0;i<=3;i++) { int xx=one.x+wy[i][0],yy=one.y+wy[i][1]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==1&&st[xx][yy]==0) { st[xx][yy]=1; q.push({xx,yy}); } } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; if(a[i][j]==1) { qdx=i,qdy=j; } } } bfs(); int flag=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==1&&st[i][j]==0) { flag=1; } } } if(flag==1) cout<<"NO"<<endl; else cout<<"YES"<<endl; return 0; }