2019-08-06(甲级1题,乙级5题)

甲级

1002

这道题有个坑,就是系数为0的时候不算,这个需要在算完之后再逐项挑出来。此题是姥姥和何老师开的的数据结构慕课里,何老师讲授的多项式的求和。下意识地用了链表来写,无奈于突然忘了链表怎么构建,想到可以用vector,搭配struct结构体来快速模拟。于是有了第一种方法(这种方法有点麻烦,因为其实原题目中指数N的范围只有[0,1000],少得可怜,完全可以直接开数组来做,但确实会有点浪费空间就是了。):

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    typedef struct{
        int k;
        float a;
    }node;
    vector<node> p1,p2;
    //输入,分别存到p1,p2
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        node temp;
        cin>>temp.k>>temp.a;
        p1.push_back(temp);
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++){
        node temp;
        cin>>temp.k>>temp.a;
        p2.push_back(temp);
    }
    //遍历,把p2的元素插入到p1
    int i1=0,i2=0;
    while(i1<p1.size()&&i2<p2.size()){
        if(p1[i1].k<p2[i2].k){
            p1.insert(p1.begin()+i1,p2[i2]);
            i1++;
            i2++;
        }
        else if(p1[i1].k==p2[i2].k){
            p1[i1].a+=p2[i2].a;
            i1++;
            i2++;
        }
        else{
            i1++;
        }
    }
    //p2剩下的继续插入到p1的尾部
    while(i2<p2.size()){
        p1.insert(p1.end(),p2[i2]);
        i2++;
    }
    //在这里卡了大半天,细心点啊,数个数的时候也要判断是否为0
    int cnt=0;
    for(int i=0;i<p1.size();i++){
        if(p1[i].a!=0) cnt++;
    }
    cout<<cnt;
    for(int i=0;i<p1.size();i++){
        if(p1[i].a!=0) printf(" %d %.1f",p1[i].k,p1[i].a);
    }
    return 0;
}

然后是第二种方法,直接开数组,空间换时间的方法(其实也换不了多少时间):

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){
    float b[1001];
    for(int i=0;i<1001;i++) b[i]=0;
    //输入
    int n,m;
    cin>>n;
    for(int i=0;i<n;i++){
        int k;
        float a;
        scanf("%d%f",&k,&a);
        b[k]+=a;
    }
    cin>>m;
    for(int i=0;i<m;i++){
        int k;
        float a;
        scanf("%d%f",&k,&a);
        b[k]+=a;
    }
    //输出,记得算个数和输出项的时候都要判断是否为0
    int cnt=0;
    for(int i=1000;i>=0;i--){
        if(b[i]!=0)cnt++;
    }
    cout<<cnt;
    for(int i=1000;i>=0;i--){
        if(b[i]!=0) printf(" %d %.1f",i,b[i]);
    }
    return 0;
}

乙级

1036 跟奥巴马一起编程

这题就算了。。

1037 在霍格沃茨找零钱

这题也算了,有点类似时间的转换。

1038 统计同成绩学生

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:
输入在第 1 行给出不超过 10^5的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:
3 2 0

这道题要说一下,关于数组统一初始化的问题,对于整数数组,可以直接使用int a[10]={0}来将其全部初始化为0,但是若使用memset函数统一初始化为0或-1的话,需要用到#include <cstring>头文件和memset(a,0,10*sizeof(int))(顺便提及,memory.hstring.h都能对应memset,而malloc函数要用stdlib.hmalloc.h)。非0非-1的初始化,其实循环赋值也挺好的,复杂度就一个O(n)。

#include <iostream>
using namespace std;

int main(){
    int n,k,a[100001];
    cin>>n;
    //这里是将数组初始化
    for(int i=0;i<100001;i++){
        a[i]=0;
    }
    for(int i=0;i<n;i++){
        int temp;
        cin>>temp;
        a[temp]++;
    }
    cin>>k;
    for(int i=0;i<k;i++){
        int temp;
        cin>>temp;
        cout<<a[temp];
        if(i!=k-1) cout<<" ";
    }
    return 0;
}

1039 到底买不买

这道题简而言之就是求两串字符串中各个字符是否符合要求。
因为字符只有[09]、[az]、[A~Z],直接开两个256的数组来统计各个字符出现的次数,遍历每个字符串,以字符为下标进行统计,出现一次就++,之后再遍历一遍,用两个变量计算满足条件与否就ok了。

1040 有几个PAT

这题有个坑,就是要取余%1000000007,看看柳神的讲解:链接
就是这个坑,又耗了一段时间。。

#include <iostream>
using namespace std;

int main(){
    string a;
    cin>>a;
    int index=-1,P=0,A=0,T=0,n=0,len=a.length();
    int *sum = new int[100001];
    for(int i=0;i<100001;i++) sum[i]=0;
    //从前往后或从后往前数其实都一样,这里是从后开始数
    for(int i=len-1;i>=0;i--){
        //先从后往前数T有多少个
        if(a[i]=='T'){
            T++;
            T=T%1000000007;
        }
        //逢A就赋值,说明它后面有N个T了
        else if(a[i]=='A'){
            A+=T;
            A=A%1000000007;
        }
        //逢P就又赋值,告诉它后面能组成M个AT了
        else if(a[i]=='P'){
            P+=A;
            P=P%1000000007;
        }
        //cout<<a[i]<<sum[i]<<endl;
    }
    cout<<P%1000000007;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353