2018-team7-CF26

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

状态不好,打得很糟糕,寝室里不敢写代码,跑到外面楼道写- -

遇到一题区间覆盖WA成dog

D题傻吊题

本意是按照题意模拟 从前往后背包

实际上不是 你会发现很难判断一个背包之前是不是不能再放了,如果继续放会让答案出错

因此就必须倒着做
错误代码示例

{{{
#!c
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll cnt[202000];
ll weight[202000];
ll a[202000];
int main(){
    ll n,m,k;
    cin>>n>>m>>k;
    ll ans=0;
    for(int i=1;i<=n;++i){
        cin>>a[i];
    }
    int now=1;//first box
    bool ok=false;//I know...
    for(int i=1;i<=n;++i){
        if(weight[now]+a[i]<=k){
            weight[now]+=a[i];
            cnt[now]++;
        }
        else{
            now++;
            if(now==m+1){
                now=1;
            }
            if(weight[now]){
                cnt[now]=0;
                weight[now]=0;
            }
            i--;
        }
    }
    for(int i=1;i<=m;++i) ans+=cnt[i];
    cout<<ans<<endl;
    return 0;
}
}}}

状态不好,打得很糟糕,寝室里不敢写代码,跑到外面楼道写- -

遇到一题区间覆盖WA成dog

D题傻吊题

本意是按照题意模拟 从前往后背包

实际上不是 你会发现很难判断一个背包之前是不是不能再放了,如果继续放会让答案出错

因此就必须倒着做

错误代码示例

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll cnt[202000];
ll weight[202000];
ll a[202000];
int main(){
    ll n,m,k;
    cin>>n>>m>>k;
    ll ans=0;
    for(int i=1;i<=n;++i){
        cin>>a[i];
    }
    int now=1;//first box
    bool ok=false;//I know...
    for(int i=1;i<=n;++i){
        if(weight[now]+a[i]<=k){
            weight[now]+=a[i];
            cnt[now]++;
        }
        else{
            now++;
            if(now==m+1){
                now=1;
            }
            if(weight[now]){
                cnt[now]=0;
                weight[now]=0;
            }
            i--;
        }
    }
    for(int i=1;i<=m;++i) ans+=cnt[i];
    cout<<ans<<endl;
    return 0;
}