2020第十一届蓝桥杯国赛B组C/C++个人题解+源代码

先存个样~~之后补全
具体移至博客这个文章<<<---点击查看后应该对你有帮助
这是我的写法,有什么建议或者更好的方法,或者错了可以告诉我。。

A:美丽的 2


思路:直接1-2020枚举判断

int main(){
    int tot=0;
    for(int i=1;i<=2020;i++){
        int k=i;
        while(k){
            int g=k%10;
            k/=10;
            if(g==2){tot++;break;}
        }
    }
    cout<<tot<<endl;
  return 0;
}

答案:563

B:扩散


思路:bfs跑,,然后时间在2020内都记录,边记录边累计个数,每个加个2100,从0开始,一分钟向上扩散1,最多不超过2100

struct node{
    int x;
    int y;
    int t;
};
int da[4][2]={1,0,-1,0,0,-1,0,1};
int n=2100;
int ma[10000][10000],vis[10000][10000];
queue<node> q;
void bfs(){
    mem(ma,0);
    mem(vis,0);
    node s,p;
    p.t=0,p.x=n,p.y=n;q.push(p);
    p.t=0,p.x=n+2000,p.y=n+2000;q.push(p);
    p.t=0,p.x=n+2020,p.y=n+11;q.push(p);
    p.t=0,p.x=n+11,p.y=n+14;q.push(p);
    vis[n][n]=vis[n+2000][n+2000]=vis[n+2020][n+11]=vis[n+11][n+14]=1;
    ll ans=4;
    while(!q.empty()){
        p=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            s.x=p.x+da[i][0];
            s.y=p.y+da[i][1];
            s.t=p.t+1;
            if(vis[s.x][s.y]==0&&s.t<=2020){
                vis[s.x][s.y]=1;
                ans++;
                q.push(s);
            }
        }
    }
    cout<<ans<<endl;
}
int main(){
    bfs();
    return 0;
}

答案:20312088

C阶层约数


答案:39001250856960000

D:本质上升序列


思路:计算每个子序列,我先转化成数字了
代码:

ull ma[250],dp[250];
int main(){
    mem(dp,0);
    for(int i=0;i<250;i++)dp[i]=1;
    string ch;
    cin>>ch;
    cout<<ch.length()<<endl;
    for(int i=0;i<ch.length();i++){
        ma[i]=ch[i]-'a';
    }
    for(int i=0;i<ch.length();i++){
        for(int j=0;j<i;j++){
            if(ma[i]>ma[j])dp[i]+=dp[j];
        }
    }
    ull ans=0;
    for(int i=0;i<ch.length();i++){
        ans+=dp[i];
    }
    cout<<ans<<endl;
    return 0;
}

答案:2472673705(怎么感觉错了,好多人是:3616159)

题 E: 玩具蛇


思路:dfs各个找一遍,实话说,这题好像比前面简单。。

ll tot=0,n=4;
int ma[5][5];
int da[4][2]={-1,0,1,0,0,-1,0,1};
void dfs(int i,int j,int k){
    if(!ma[i][j]&&k==n*n){
        tot++;
        return ;
    }
    ma[i][j]=k;
    for(int e=0;e<4;e++){
        int dx=i+da[e][0];
        int dy=j+da[e][1];
        if(dx>=1&&dy>=1&&dy<=n&&dx<=n&&!ma[dx][dy]){
            dfs(dx,dy,k+1);
        }
    }
    ma[i][j]=0;
}
int main(){
    mem(ma,0);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            dfs(i,j,1);
            cout<<tot<<endl;
        }
    cout<<tot<<endl;
    return 0;
}

答案:552

F: 皮亚诺曲线距离




代码:没写出来。。

G: 游园安排



思路:排个顺序,比较字母个数,小字母多的放前面,一样多的,小字母靠前放前面
(不敢保证完全对)代码:

string x[1000001];
bool cmp(const string a,const string b){
    int visa[30],visb[30];
    mem(visa,0);
    mem(visb,0);
    visa[a[0]-'A']++;
    visb[b[0]-'A']++;
    for(int i=1;i<a.length();i++)
        visa[a[i]-'a']++;
    for(int i=1;i<b.length();i++)
        visb[b[i]-'a']++;
    int mn=min(a.length(),b.length());
    for(int i=0;i<mn;i++){
        if(visa[i]>visb[i])return 1;
        else if(visa[i]<visb[i])return 0;
    }
    if(a.length()>b.length())return 0;
    else if(a.length()<b.length()) return 1;
    else{
        for(int i=0;i<mn;i++)
            if(a[i]>b[i])return 0;
            else if(a[i]<b[i])return 1;
        return 1;
    }
}
int main(){
    int n=-1;
    string ch;
    cin>>ch;
    int i=0;
    while(i<=ch.length()){
        if(ch[i]>='A'&&ch[i]<='Z'){
            n++;
            x[n]+=(ch[i]);
        }
        else if(ch[i]!='\0') x[n]+=ch[i];
        i++;
    }
    n++;
    sort(x,x+n,cmp);
    for(int i=0;i<=n/2;i++)cout<<x[i];
    cout<<endl;
    return 0;
}

H: 答疑



思路:s+e+a小的放前面,一样的就把s+a小的放前面
(不保证完全对)代码:

struct student{
    ll s,a,e;
};
student stu[1001];
bool cmp(const student n1,const student n2){
    /*ll sum1=n1.a+n1.e+n1.s+n2.a+n2.s;
    ll sum2=n2.a+n2.e+n2.s+n1.a+n1.s;
    if(sum1==sum2)return n1.a+n1.s<n2.a+n2.s;
    return sum1<sum2;
    */
    ll sum1=n1.s+n1.a,sum2=n2.s+n2.a;
    if(sum1+n1.e>sum2+n2.e)return 0;
    else if(sum1+n1.e<sum2+n2.e)return 1;
    else{
        if(sum1>sum2)return 0;
        else if(sum1<sum2)return 1;
        else return 1;
    }
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>stu[i].s>>stu[i].a>>stu[i].e;
    }
    sort(stu,stu+n,cmp);
    ll ans=0,k=0;
    for(int i=0;i<n;i++){
        //cout<<stu[i].s<<" "<<stu[i].a<<" "<<stu[i].e<<endl;
        k=k+stu[i].s+stu[i].a;
        ans+=k;
        //cout<<k<<endl;
        k+=stu[i].e;
    }
    cout<<ans<<endl;
    return 0;
}

I: 出租车

J: 质数行者

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容