33,007
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
const int size=50001;
int a[size],left[size],right[size],n,maxsum,minsum;
int ll(int a,int b,int flag)
{
if (flag)
return a>b;
return a<b;
}
int m_sum(int flag)
{
int sum,b,i;
left[0]=b=sum=a[0];
for (i=1;i<n;++i)
{
if (ll(b,0,flag))
b+=a[i];
else
b=a[i];
if (ll(b,sum,flag))
sum=b;
left[i]=sum;
}
right[n-1]=b=sum=a[n-1];
for (i=n-2;i>=0;--i)
{
if (ll(b,0,flag))
b+=a[i];
else
b=a[i];
if (ll(b,sum,flag))
sum=b;
right[i]=sum;
}
sum=left[0]+right[1];
for (i=1;i<n-1;++i)
if (ll(left[i]+right[i+1],sum,flag))
sum=left[i]+right[i+1];
return sum;
}
int main()
{
int t,i,sum,x,y;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=sum=0;i<n;++i)
{
scanf("%d",a+i);
sum+=a[i];
}
x=m_sum(1);
y=sum-m_sum(0);
if (y>x)
x=y;
printf("%d\n",x);
}
}
#include <stdio.h>
const int size=50001;
int a[size],left[size],right[size],n,maxsum,minsum;
int ll(int a,int b,int flag)
{
if (flag)
return a>b;
return a<b;
}
int m_sum(int flag)
{
int sum,b,i;
left[0]=b=sum=a[0];
for (i=1;i<n;++i)
{
if (ll(b,0,flag))
b+=a[i];
else
b=a[i];
if (ll(b,sum,flag))
sum=b;
left[i]=sum;
}
right[n-1]=b=sum=a[n-1];
for (i=n-2;i>=0;--i)
{
if (ll(b,0,flag))
b+=a[i];
else
b=a[i];
if (ll(b,sum,flag))
sum=b;
right[i]=sum;
}
sum=left[0]+right[1];
for (i=1;i<n-1;++i)
if (ll(left[i]+right[i+1],sum,flag))
sum=left[i]+right[i+1];
return sum;
}
int main()
{
int t,i,sum,x,y;
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (i=sum=0;i<n;++i)
{
scanf("%d",a+i);
sum+=a[i];
}
x=m_sum(1);
y=sum-m_sum(0);
if (n>=5 && y!=0 && y>x)
x=y;
printf("%d\n",x);
}
}
#include <stdio.h>
#include <string.h>
#include <memory.h>
struct node{
node *next[26];
int flag;
void init() {memset(next,0,sizeof(next));flag=0;}
};
node trien[200005],*root,*p,*rt;
int k,ok,len,num;
char str[21];
void insert(char *str)
{
int i=0,j;
p=root;
while (str[i])
{
j=str[i]-'a';
if (p->next[j]==0)
{
trien[k].init();
p->next[j]=&trien[k++];
}
p=p->next[j];
i++;
}
p->flag=1;
}
node* find(char *str)
{
int i=0,j;
p=root;
while (str[i])
{
j=str[i]-'a';
if (p->next[j]==0)
return 0;
p=p->next[j];
i++;
}
return p;
}
void ps(node *t)
{
int i;
if (num==8)
ok=1;
if (ok)
return;
if (t->flag==1)
{
str[len]='\0';
if (num==0)
printf("%s",str);
else
printf(" %s",str);
num++;
}
for (i=0;i<26;++i)
{
if (t->next[i]!=0)
{
str[len++]='a'+i;
ps(t->next[i]);
if (ok)
return;
}
}
len--;
}
int main()
{
int n,q;
trien[0].init();
root=trien;
k=1;
scanf("%d",&n);
while (n--)
{
scanf("%s",str);
insert(str);
}
scanf("%d",&q);
while (q--)
{
scanf("%s",str);
rt=find(str);
if (rt==0)
printf("%s",str);
else
{
num=ok=0;
len=strlen(str);
ps(rt);
}
printf("\n");
}
return 0;
}