真的 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_ch
int 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_ch
int 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 10000007
using namespace std;
//by mars_ch
int 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;
}
第五题: