8.28测试总结

· · 算法·理论

8.28测试总结

T661095 结算日

得分:50

应得:100

考点:模拟

错误思路:模拟能还就还,否则就过,收了钱以后再试

正确思路:模拟,统一还

完整思路:

#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],sum[100005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); 
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    long long id=0,ans=0;
    bool q=0;
    for(int i=1;i<=n;i++)
    {
        sum[i]=sum[i-1]+a[i];
        ans++;
        if(a[i]<0&&q==0)
        {
            q=1;
            id=i;
        }
        else if(sum[i]>-1&&q==1)
        {
            q=0;
            ans+=(i-id)*2;
        }
    }
    cout<<ans;
    return 0;
}

8.28测试总结

T661095 结算日

得分:6

应得:100

考点:

错误原因:没有判断=,和数组开小了(痛失94QAQ)

思路:用质数筛筛出4e5以内的质数,枚举

完整代码:

#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],sum[100005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); 
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    long long id=0,ans=0;
    bool q=0;
    for(int i=1;i<=n;i++)
    {
        sum[i]=sum[i-1]+a[i];
        ans++;
        if(a[i]<0&&q==0)
        {
            q=1;
            id=i;
        }
        else if(sum[i]>-1&&q==1)
        {
            q=0;
            ans+=(i-id)*2;
        }
    }
    cout<<ans;
    return 0;
}