版权声明:原创,未经作者允许禁止转载 https://blog.csdn.net/Mr_wuyongcong/article/details/86577928
前言
成功翻车
成绩
是有算别人的
正题
线段树什么的最讨厌了【 】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86577063
已经没有什么好害怕的了【差分】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86577360
我才不是萝莉控呢【哈夫曼树】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86577658
T2暴力
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll XJQ=1e9+7;
char s[1001];
ll n,ans[1001],sum,t;
int main()
{
freopen("data.in","r",stdin);
freopen("data.ans","w",stdout);
scanf("%lld",&t);
while(t--){
scanf("%s",s+1);
n=strlen(s+1);
memset(ans,0,sizeof(ans));sum=0;
for(ll i=1;i<n;i++)
{
for(ll j=i+1;j<=n;j++)
{
ll left=0;bool flag=1;
for(ll k=i;k<=j;k++)
{
if(s[k]=='(') left++;
else left--;
if(left<0){
flag=0;
break;
}
}
if(flag&&!left)
for(ll k=i;k<=j;k++)
ans[k]++;
}
}
for(ll i=1;i<=n;i++)
sum+=ans[i]*i%XJQ;
printf("%lld\n",sum);
}
}
T2随机数据
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
int t,n;
int main()
{
freopen("data.in","w",stdout);
srand(time(0));
t=10;
n=100;
printf("10\n");
for(int i=1;i<=t;i++)
{
//for(int j=1;j<=n/2;j++)
// printf("(");
for(int j=1;j<=n;j++)
// printf(")");
if(rand()&1) printf(")");
else printf("(");
printf("\n");
}
}
T2 30code
#include<cstdio>
#include<cstring>
#include<stack>
#define ll long long
using namespace std;
const ll N=1e6+10,XJQ=1e9+7;
stack<ll> left,mark,k;
ll t,n,ans,sum[N],ks,marks;
char s[N];
int main()
{
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
scanf("%lld",&t);
while(t--)
{
scanf("%s",s+1);
n=strlen(s+1);
ks=0;ans=0;marks=0;
while(!left.empty()) left.pop();
while(!mark.empty()) mark.pop();
while(!k.empty()) k.pop();
for(ll i=1;i<=n;i++)
{
sum[i]=sum[i-1]+i;
if(s[i]==')'&&left.empty())
marks=ks=0;
else if(s[i]==')'){
ll z=(sum[i]-sum[left.top()-1])%XJQ;
left.pop();
marks=mark.top();mark.pop();
ks=k.top();k.pop();ks=(ks+1)%XJQ;
(marks+=z*ks)%=XJQ;
(ans+=marks)%=XJQ;
}
else{
left.push(i);
mark.push(marks);
k.push(ks);
marks=0;ks=0;
}
}
printf("%lld\n",ans);
}
}
T3 50分code
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e3+10;
int t,n,a[N],f[N][N*2];
int main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
a[n+1]=0;
for(int i=n;i>=1;i--)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
a[i]+=a[i-1];
memset(f,0x3f,sizeof(f));
f[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=n;j>=1;j--)
f[i][j]=min(min(f[i][j*2-1],f[i][j*2])+a[i],f[i-1][j-1]);
}
printf("%d\n",f[n][1]);
}
}
总结
开心,题目难一点就翻车了
。
好像是
,就写了一个,然后发现有一个地方直接写了
。
愉快爆蛋。
写了半天,和正解檫肩而过,写了一个先加后
就愉快30
QVQ$
明显
分