2014暑假第一天解题总结

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值