HDU100题 2030-2039

2030:

// 一个汉字占两个字符,且汉字的编码不论是高位还是低位都小于0

#include 
#include 

using namespace std;

char str[1000000];

int main()
{
    int n;
    scanf("%d", &n);
    getchar();
    while(n--)
    {
        gets(str);
        int len = strlen(str);
        int cnt = 0;
        for(int i=0; i

2031:

#include 
#include 

using namespace std;

stack s;

void change(int n, int r)
{
    if(n == 0)
    {
        s.push(0);
        return;
    }
    if(n < 0)   // 这里需要修改符号 不然取余会出现负数
        n = -n;
    while(n)
    {
        s.push(n%r);
        n /= r;
    }
}
int main()
{
    int n, r;
    while(scanf("%d %d", &n, &r) != EOF)
    {
        while(!s.empty()) s.pop();
        change(n, r);

        if(n < 0)   
            printf("-");
        while(!s.empty())
        {
            switch(s.top())
            {
                case 10: printf("A"); break;
                case 11: printf("B"); break;
                case 12: printf("C"); break;
                case 13: printf("D"); break;
                case 14: printf("E"); break;
                case 15: printf("F"); break;
                default: printf("%d", s.top());
            }
            s.pop();
        }
        puts("");
    }


    return 0;
}

2032:

#include 
using namespace std;

int a[100][100];
int main()
{
    int n;
    while(scanf("%d", &n) != EOF)
    {
        for(int i=0; i

2033:

#include 
using namespace std;

int main()
{
    int ah, am, as;
    int bh, bm, bs;
    int ans[3];
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d %d", &ah, &am, &as);
        scanf("%d %d %d", &bh, &bm, &bs);
        int tmp = (as + bs) / 60;
        ans[2] = (as + bs) % 60;
        int tmp2 = (am + bm + tmp) / 60;
        ans[1] = (am + bm + tmp) % 60;
        ans[0] = ah + bh + tmp2;

        printf("%d %d %d\n", ans[0], ans[1], ans[2]);
    }



    return 0;
}

2034:

/* 在集合A中去除B中的元素,然后排序输出
   因为看题不认真,没看到从小到大输出,理所当然的认为是保持原有的顺序,WA了一发 */

#include 
#include 
#include 

using namespace std;
const int INF = 0x3f3f3f3f;

vector v1;
vector v2;
int main()
{
    int n, m;
    while(scanf("%d %d", &n, &m), n||m)
    {
        int num;
        v1.clear();
        v2.clear();
        for(int i=0; i

2035:

// 快速幂

#include 
using namespace std;
typedef long long LL;

LL pow_mod(LL a, LL n, LL mod)
{
    LL res = 1;
    while(n)
    {
        if(n%2 != 0)
        {
            res = res * a % mod;
        }
        a = a * a % mod;
        n = n / 2;
    }
    return res;
}

int main()
{
    LL a, b;
    while(scanf("%lld%lld", &a, &b), a || b)
    {
        printf("%lld\n", pow_mod(a, b, 1000));
    }


    return 0;
}

2036:

/* 把矩形分解成n-2个三角形
用叉乘计算三角形面积带绝对值
但是如果在计算多变型的面积时,就不带绝对值
因为多边形分凹凸的情况,凸的贡献为正,凹的贡献为负 */

#include 
#include 
#include 

using namespace std;
typedef long long LL;

struct node{
    int x, y;
};
struct node a[100+7];

int main()
{
    int n;
    while(scanf("%d", &n), n)
    {
        for(int i=0; i

2037:

// 贪心思想,优先选择结束时间早的

#include 
#include 
using namespace std;

struct node {
    int s, e;
};
struct node a[100+7];

bool cmp(node a1, node a2)
{
    if(a1.e == a2.e)
        return a1.s < a2.s;
    return a1.e < a2.e;
}
int main()
{
    int n;
    while(scanf("%d", &n), n)
    {
        for(int i=0; i= e.e)
            {
                e = a[i];
                ans ++;
            }
        }
        printf("%d\n", ans);

    }    


    return 0;
}

2038:

// HDU上没有2038题

2039:

// 较小的两边之和大于最大的边
// 题目说是正数,不是整数,不能用int否则WA

#include 
#include 
using namespace std;

int main()
{
    int m;
    scanf("%d", &m);
    while(m--)
    {
        double a[3];
        scanf("%lf %lf %lf", &a[0], &a[1], &a[2]);
        sort(a, a+3);
        if(a[0] + a[1] > a[2])
            printf("YES\n");
        else
            printf("NO\n");

    }


    return 0;
}

 

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