2014暑假第一天解题总结

来源:互联网 发布:卖淘宝号属于犯法吗 编辑:程序博客网 时间:2024/05/17 22:57

UVa10878(Decode the tape

这个题他的题目描述较少,一开始看根本不知道它在说什么,->_<-,然后去BAIDU了,

题目要点:用' '(space)来表示数字‘0’,用'o'(小写)表示数字‘1’,然后其他的输入就忽略掉,然后将由‘0’ ‘1’组成的2进  制数转化为对应的acsii码输出。附上代码:

#include <cstdio>using namespace std;int main(){    char buf[20];    int temp = 0;    while(fgets(buf, 20, stdin) != NULL)    {        temp = 0;        if(buf[0] == '_')   continue;  ///如果是一行下划线,就直接忽略        for(int i = 1; i < 10; ++i)        {            if(buf[i] == 'o')                temp = 2 * temp + 1;   ///如果是‘o’,就进位加1            else if(buf[i] == ' ')                temp = 2 * temp;        ///如果是‘ ’,就进位        }        putchar(temp);                  ///将对应ascii码值输出    }    return 0;}

UVa11292(Dragon of Loowater)

题目分析:看所雇佣的骑士是否能杀掉所有Dragon,如果能的话,就算出雇佣骑士花费的最少钱。

    能杀掉Dragon是有条件的

#include <cstdio>#include <algorithm>using namespace std;const int max_size = 20005;int main(){    int n,m;    int tag1, tag2;    int spend;    int nn[max_size], mm[max_size];    while(scanf("%d %d", &n, &m) != EOF && (n+m) != 0)    {        tag1 = tag2 = 0;        for(int i = 0; i < n; ++i)     ///存储Dragon的信息            scanf("%d", &nn[i]);        for(int i = 0; i < m; ++i)      ///存储骑士的信息            scanf("%d", &mm[i]);        sort(nn, nn+n);                 ///利用sort函数直接对信息进行排序        sort(mm, mm+m);        spend = 0;        for(tag1 = 0; tag1 < n; tag1++)        {            if(tag2 >= m)   break;      ///tag1是对Dragon的信息进行标记,tag2是对骑士信息进行标记            while(tag2 < m && nn[tag1] > mm[tag2]) tag2++;             ///如果满足tag2的值还在骑士数量之内,并且骑士不能杀掉dragon,就让tag2++,直到条件不被满足            if(tag2 >= m)   break;  ///如果tag2超出m,就break            spend += mm[tag2];      ///能走到这步,就将花费记下来            tag2++;        }        if(tag1 < n)    printf("Loowater is doomed!\n");   ///如果if成立,就说明tag2 >= m ,即没有足够的骑士去杀dragon        else            printf("%d\n",spend);               ///否则输出最小花费    }    return 0;}

sort()包含在 #include<algorithm>中 复杂度是O(N*lgN)

void sort(RanIt first, RanIt last); //默认的sort函数是按升序排。
RanIt first &RanIt last 分别表示要排数组的头尾  比如arry[100], 就写成sort(arry, arry+100);

排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。

void sort(RanIt first, RanIt last, Pred pr); // 可以自己写一个函数,按特定意图进行排序。
返回值是bool型
sort详细学习,见STL sort函数简介


0 0
原创粉丝点击