2017多校-9

来源:互联网 发布:东莞seo公司 编辑:程序博客网 时间:2024/06/05 09:25

Numbers
http://acm.hdu.edu.cn/showproblem.php?pid=6168
题意:将a数组和b数组混在一起,b数组由ai+aj(0<=i

#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int num[125250];int main(){    int n,m;    int sum;    int i,j,k;    while (scanf("%d",&m)!=EOF)    {        memset(num,0,sizeof (num));        for (i=0;i<m;i++)        {            scanf("%d",&num[i]);        }        sort(num,num+m);        sum=m;        for (i=1;i<m;i++)        {            if (num[i]==0)                continue;            for (j=0,k=i+1;j<i;j++)            {                if (num[j]==0)                    continue;                n=num[i]+num[j];                for (;k<m&&num[k]<=n;k++)                {                    if (num[k]==n)                    {                        num[k]=0;                        sum--;                        break;                    }                }            }        }        printf("%d\n",sum);        printf("%d",num[0]);        for (i=1;i<m;i++)        {            if (num[i]!=0)               printf(" %d",num[i]);        }        printf("\n");    }    return 0;}

Two strings
http://acm.hdu.edu.cn/showproblem.php?pid=6170
题意:有两个字符串,问你第二个字符串和第一个字符串能否匹配,第二个字符串有两种符号,’.’可以匹配任意字符,’*’表示前一个字符可以重复零次或多次
解题思路:用dp解,dp[i][j]表示第二个字符串前i个字符和第一个字符串前j个字符能否匹配

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=2500;char s1[maxn],s2[maxn];int dp[maxn][maxn];int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%s %s",s1+1,s2+1);        int len1=strlen(s1+1);        int len2=strlen(s2+1);        memset(dp,0,sizeof(dp));        dp[0][0]=1;        for(int i=1;i<=len2;i++)        {            if(s2[i]=='*')dp[i][0]=1;            for(int j=1;j<=len1;j++)            {                if(s2[i]=='.')                {                    dp[i][j]=dp[i-1][j-1];                }                else if(s2[i]!='*')                {                    if(s2[i]==s1[j])                    {                        dp[i][j]=dp[i-1][j-1];                    }                    else                    {                        dp[i][j]=0;                    }                }                else                {                    dp[i][j]=max(dp[i-1][j],dp[i-2][j]);                    if(dp[i][j-1]&&s1[j]==s1[j-1])                    {                        dp[i][j]=1;                    }                }            }        }        if(dp[len2][len1])        {            printf("yes\n");        }        else        {            printf("no\n");        }    }    return 0;}
原创粉丝点击