ACM ICPC 2017 Warmup Contest 8(ACM PolyU International Invitation Contest)

19 篇文章 0 订阅
11 篇文章 0 订阅

最后一场计蒜客的icpc训练了

本准备与队友合练的,结果没想到队友都进城了,那就单挑好了

水水四题,就这样吧,节约时间啊,没太多时间给我浪费了

A. Anniversary

思路:这个估计是前四题中最难的了,但由于数据量只有1e3,那么O(n^2)的算法完全可以过,那么就预处理一下区间最大值,做个dp就好了

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1010;

int height[maxn];
int dp[maxn][maxn];

int main()
{
    int t;
    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            int n;
            int area = 0;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%d",&height[i]);
            }
            for(int i=0;i<n;i++)
            {
                dp[i][i] = height[i];
                area = max(area,dp[i][i]);
                for(int j=i+1;j<n;j++)
                {
                    dp[i][j] = min(dp[i][j-1],height[j]);
                    area = max(area,dp[i][j] * (j-i+1));
                }
            }
            printf("%d\n",area);
        }
    }
    return 0;
}

 

B. Currency

 

 

思路:这题更水了,就是一个简单的计算,由于一开始可能数据出错了,导致WA声一片,不过后来rejudge后,基本也没啥问题

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1e5+10;

const double eps = 1e-15;

char currency[20][maxn];
double money[20];

int main()
{
    int n;
    //printf("%.2f %.2f %.2f",5.005,5.0049999+eps,5.005+eps);
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%s%lf",currency[i],&money[i]);
        }
        double sum;
        scanf("%lf",&sum);
        for(int i=0;i<n;i++)
        {
            double re = 100.0 * sum / money[i] + eps;
            printf("%s %.2f\n",currency[i],re);
        }
        //printf("%d\n",sum);
    }
    return 0;
}

 

 C. Slogan

 

 

思路:字符串预处理,将无用字符删去,将大写转小写,然后双指针判个回文就好了

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1010;

char slogan[maxn],tempslogan[maxn];

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        getchar();
        while(n--)
        {
            gets(tempslogan);
            int templen = strlen(tempslogan);
            int len = 0;
            bool panama = true;
            for(int i=0;i<templen;i++)
            {
                if(tempslogan[i]==' '||tempslogan[i]=='.'||tempslogan[i]==',')
                {
                    continue;
                }
                if(tempslogan[i]>='A'&&tempslogan[i]<='Z')
                {
                    slogan[len++] = tempslogan[i] - 'A' + 'a';
                }
                else
                {
                    slogan[len++] = tempslogan[i];
                }
            }
            slogan[len] = '\0';
            //printf("%s\n",slogan);
            for(int i=0,j=len-1;i<=j;i++,j--)
            {
                if(slogan[i]!=slogan[j])
                {
                    panama = false;
                    break;
                }
            }
            if(panama)
            {
                printf("YES\n");
            }
            else
            {
                printf("NO\n");
            }
        }
    }
    return 0;
}


D. Go

 

思路:围棋黑白子比大小,这个确实没啥说的了

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <string>
#include <queue>
#include <stack>

using namespace std;

const int maxn = 1e5+10;

int main()
{
    int b,w;
    while(scanf("%d%d",&b,&w)!=EOF)
    {
        if(b+w<19*19)
        {
            printf("Unknown\n");
        }
        else
        {
            b -= 7;
            //cout << b<< endl;
            if(b>w)
            {
                printf("Black\n");
            }
            else
            {
                printf("White\n");
            }
        }
    }
    return 0;
}


文章地址:http://blog.csdn.net/owen_q/article/details/78241151

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值