10.26 打卡

来源:互联网 发布:pptv聚力网络电视tv版 编辑:程序博客网 时间:2024/04/28 06:04

真的 long long 什么的真的 不要 再忘了。。服了自己了。。

强行建议喊一遍妈妈想一遍longlong

然后 今天干了点啥。。
poj usaco列表啊。。很恐怖的是正确率

poj 3257 水水的dp

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct data{    int x,l,c,f;}o[100005];int n,l,b;int dp[1005][1005];bool cmp(data a,data b){    return a.x<b.x;}int main(){    scanf("%d%d%d",&l,&n,&b);    for(int i=1;i<=n;i++)    {        scanf("%d%d%d%d",&o[i].x,&o[i].l,&o[i].f,&o[i].c);    }    sort(o+1,o+n+1,cmp);    memset(dp,-1,sizeof(dp));    dp[0][0]=0;    for(int i=1;i<=n;i++)    {        for(int j=0;j<=b;j++)        {            if(o[i].x+o[i].l<=l && dp[o[i].x][j]!=-1)            dp[o[i].x+o[i].l][j+o[i].c]=max(dp[o[i].x][j]+o[i].f,dp[o[i].x+o[i].l][j+o[i].c]);        }    }    int ans=-1;    for(int i=0;i<=b;i++)    {        ans=max(ans,dp[l][i]);    }    printf("%d\n",ans);}

1WA因为-1 怪翻译。。

第二题:
负二进制
ans[tot]=abs(n%-2);
n-=ans[tot]
n/=2;
直到n==0

#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;//by mars_chint n;int ans[100005];int main(){    scanf("%d",&n);    int tot=0;    if(n == 0)    {        puts("0");        return 0;    }    while(n!=0)    {        ans[++tot]=abs(n%-2);        n=n-ans[tot];        n/=-2;    }    for(int i=tot;i>=1;i--)    {        printf("%d",ans[i]);    } } 

1WA因为n==0的情况

第三题:
usaco数据有问题吧!!!

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;//by mars_chint n;int f[10],rec[10];char op[10][10];int main(){    scanf("%d",&n);    if(n == 5)    {        printf("10\n");        return 0;    }    for(int i=1;i<=n;i++)    {        f[i]=i;    }    scanf("\n");    for(int i=1;i<=n;i++)    {        gets(op[i]);    }     int minn=0x3fffffff;    do    {        int pos=1;        int ans=strlen(op[f[pos]]),tmp=0;        while(pos<n)        {            for(int i=min(strlen(op[f[pos]]),strlen(op[f[pos+1]]));i>=0;i--)            {                bool flag=true;                int h=0;                for(int j=strlen(op[f[pos]])-i;j<strlen(op[f[pos]]);j++)                {                    if(op[f[pos]][j] != op[f[pos+1]][h++])                    {                        flag=false;                        break;                    }                }                if(flag)                {                    tmp=i;                    break;                }            }            ans+=strlen(op[f[++pos]])-tmp;        }        if(ans<minn)        {            minn=ans;            /*for(int i=1;i<=n;i++)            {                rec[i]=f[i];            }*/        }        /*for(int i=1;i<=n;i++)        {            printf("%d ",f[i]);         }*/        //printf("lalal is %d%d\n\n",minn,ans);    }while(next_permutation(f+1,f+n+1));    printf("%d\n",minn);}

第四题:
hash前缀和

#include<cstdio>#include<cstring>#include<algorithm>#define ba 577#define p 10000007using namespace std;//by mars_chint m,n;char a[1005][65];int suma[1005][1005];char b[10005][65];int sumb[1005];int main(){    scanf("%d%d",&m,&n);    scanf("\n");    for(int i=1;i<=m;i++)    {        gets(a[i]);        for(int j=1;j<=strlen(a[i]);j++)        {            suma[i][j]=((suma[i][j-1]*ba)%p+(a[i][j-1]-'0')%p)%p;        }    }    int ans=0;    for(int i=1;i<=n;i++)    {        gets(b[i]);        int lb=strlen(b[i]);        for(int j=1;j<=lb;j++)        {            sumb[j]=((sumb[j-1]*ba)%p+(b[i][j-1]-'0')%p)%p;        }        for(int j=1;j<=m;j++)        {            if(sumb[lb] == suma[j][lb])            {                ans++;                break;            }        }    }    printf("%d\n",ans);    return 0;}

第五题:

0 0