第八届蓝桥杯大赛c/c++ b组

  1. 5200

上面是我的答案
可以直接手算,但容易出错。
或者复制题目给的数据,稍微修改并格式化,放到文本文档中,不管是运行后复制数据,还是用io重定向,都要比手算方便。
比赛的时候freopen的前两个参数写反了,一直读不进去

  1. 210

比赛的时候没想清楚怎么搜

#include
#include
#define LL long long
#define MAX 10000
bool isprime[MAX];
int prime[MAX],cnt;
void doprime(){
    cnt=0;
    memset(isprime,true,sizeof(isprime));
    isprime[0]=isprime[1]=false;
    for(LL i=2;i<=MAX;++i){
        if(isprime[i]){
            prime[cnt++]=i;
            for(LL j=i*i;j<=MAX;j+=i)//i是int可能溢出
                isprime[j]=false;
        }
    }
}
int main(){
    doprime();
    for(int i=1;;++i){
        int j;
        for(j=0;j=10) break;
        }
        if(j
  1. 好像是7开头的一个挺大的数
#include
#include
#include
using namespace std;
double a[40][40];
int data;    //电子秤的最小示数
int main(){
    for(int i=1;i<=29;++i){
        for(int j=1;j<=29;++j){
            scanf("%lf",&a[i][j]);
            if(j>1) a[i][j]+=a[i-1][j-1]/2;
            if(j

比赛时的代码没最后的比较,不知道能不蒙对

  1. 216

要想满足分成两部分并且两部分相同,对应的条件是分割线没有经过同一个点和分割线关于(3,3)点中心对称,所以从(3,3)点出发遍历所有路径,路径数再除以2 就是答案

#include
#include
#include
using namespace std;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
bool vis[10][10];
int ans;
bool check(int x,int y){
    return x>=1&&x<=6&&y>=1&&y<=6;
}
void dfs(int x,int y){
    if(x==1||x==6||y==1||y==6){
        ++ans;
        return;
    }
    for(int i=0;i<4;++i){
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(check(xx,yy)&&!vis[xx][yy]&&!vis[6-xx][6-yy]){
            vis[xx][yy]=true;
            dfs(xx,yy);
            vis[xx][yy]=false;
        }
    }
}
int main(){
    vis[3][3]=true;
    dfs(3,3);
    printf("%d %d\n",ans,ans/2);
    return 0;
}
  1. f(x/10,k)
  2. a[i-1][j-1]+1
  3. 模拟一下就好,最后排一下序。
  4. dp或者母函数暴一下,应该能过一部分数据
  5. 没看懂
  6. 数据范围记不太清了,这样应该可以,至少比枚举复杂度低
#include
#include
#include
#define MAX 100000
using namespace std;
int dp[MAX+10][100];
int main(){
    int n,k;
    int tmp;
    int ans=0;
    memset(dp,0,sizeof dp);
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i){
        scanf("%d",&tmp);
        ++dp[i][tmp%k];
        for(int j=0;j

#以上答案仅供参考

你可能感兴趣的:(题解)