哈理工多校算法赛二

 

A 吐泡泡:https://www.nowcoder.com/acm/contest/74/A

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char ch[105];
    while(gets(ch))
    {
        int lch=strlen(ch),num1=0,num2=0,j=0;
        for(int i=0;i<lch-1;i++)
        {
            if(ch[i]=='o'&&ch[i+1]=='o')
            {
                ch[i]='O';
                for(int k=i+1;k<lch-1;k++)
                    ch[k]=ch[k+1];
                i=-1;
                lch--;
            }
            else if(ch[i]=='O'&&ch[i+1]=='O')
            {
                for(int k=i;k<lch-2;k++)
                    ch[k]=ch[k+2];
                i=-1;
                lch-=2;
            }
        }
        ch[lch]='\0';
        puts(ch);
    }
 
    return 0;
}
View Code

蛮久了 现在想来直接用栈就可以了

 

B TaoTao要吃鸡:https://www.nowcoder.com/acm/contest/74/B

#include <bits/stdc++.h>
using namespace std;
struct bag{
    int w,v;
}b[105];
bool cmp(struct bag q,struct bag p)
{
    if(q.w==p.w) return q.v>p.v;
    return q.w>p.w;
}
int main()
{
    int n,m,h;
    int dp[205];
    while(~scanf("%d",&n)&&n)
    {
        scanf("%d%d",&m,&h);
        memset(dp,0,sizeof(dp));
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++)
            scanf("%d%d",&b[i].w,&b[i].v);
        sort(b,b+n,cmp);
        if(!h)
        {
            for(int i=0;i<n;i++)
                for(int j=m;j>=b[i].w;j--)
                    dp[j]=max(dp[j],dp[j-b[i].w]+b[i].v);
            printf("%d\n",dp[m]);
        }          
        else
        {
            for(int i=1;i<n;i++) /// 将价值第二高的物品留着
                for(int j=m+h-1;j>=b[i].w;j--) /// 留出1个容量
                    dp[j]=max(dp[j],dp[j-b[i].w]+b[i].v);
            printf("%d\n",dp[m+h-1]+b[0].v);
        }
    }
     
    return 0;
}
View Code

 

C 小仙女过生日:https://www.nowcoder.com/acm/contest/74/C
最有三角剖分 待解
 
D YB要打炉石:https://www.nowcoder.com/acm/contest/74/D
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n; scanf("%d",&n);
    int a[105];
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    if(n<30)
    {
        printf("no\n");
        return 0;
    }
    int cnt=1,temp=a[1];
    for(int i=1;i<n;i++)
    {
        if(temp<=a[i+1])
        {
            cnt++;
            temp=a[i+1];
        }
    }
    if(cnt>=30) printf("yes\n");
    else printf("no\n");
 
    return 0;
}
View Code

 

E 小G有一个大树:https://www.nowcoder.com/acm/contest/74/E

待解

 

F 德玛西亚万岁:https://www.nowcoder.com/acm/contest/74/F

状压DP待解

 

G 送分了QAQ:https://www.nowcoder.com/acm/contest/74/G

#include <bits/stdc++.h>
using namespace std;
int a[1000000],j=0;
bool te(int x)
{
    while(x)
    {
        if(x%100==38) return 1;
        x/=10;
    }
    return 0;
}
bool f(int x)
{
    while(x)
    {
        if(x%10==4) return 1;
        x/=10;
    }
    return 0;
}
void constant()
{
    for(int i=1;i<=1000000;i++)
    {
        if(te(i)) a[i]=1;
        else if(f(i)) a[i]=1;
    }
}
int main()
{
    constant();
    int n,m;
    while( ~scanf("%d%d",&n,&m)&&n+m )
    {
        int cnt=0;
        for(int i=n;i<=m;i++)
            if(a[i]==1) cnt++;
        printf("%d\n",cnt);
    }
 
    return 0;
}
View Code

 

H 了断局:https://www.nowcoder.com/acm/contest/74/H

#include <bits/stdc++.h>
using namespace std;
long long a[55],n;
void constant()
{
    a[0]=0,a[1]=1,a[2]=1;
    for(int i=3;i<=55;i++)
        a[i]=a[i-1]+a[i-2]+a[i-3];
}
int main()
{
    constant();
    while( ~scanf("%lld",&n) )
    {
        printf("%lld\n",a[n-1]);
    }
 
    return 0;
}
View Code

 

posted @ 2018-03-16 20:35  _Jessie  阅读(150)  评论(0编辑  收藏  举报