比赛 2024暑期C班集训2 评测结果 AAATTTTTTT
题目名称 雨滴之歌 最终得分 30
用户昵称 darkMoon 运行时间 7.000 s
代码语言 C++ 内存使用 8.29 MiB
提交时间 2024-07-02 11:08:38
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("expansion.in");
ofstream fout("expansion.out");
auto mread = [](){int x;fin >> x;return x;};
const int N = 2e5 + 5;
int n = mread(), m = mread(), ans, s[N], a[N], b[N], t[N];
int v(int x, int y){
    return a[x] + b[y];
}
signed main(){
    for(int i = 1; i <= n; i ++)
    a[i] = mread();
    for(int i = 1; i <= m; i ++)
    b[i] = mread();
    for(int i = n; i >= 1; i --){
        for(int j = 1; j <= m; j ++)
        t[j] = 0;
        if(v(i, m) >= 0){
            s[m] ++;
        }
        for(int j = 1; j <= m; j ++){
            if(s[j]){
                if(v(i, j) >= 0){
                    for(int k = j - 1; k >= 0; k --){
                        if(k == 0 || v(i, k) < 0){
                            t[k + 1] += s[j];
                            break;
                        }
                    }
                }
                else{
                    for(int k = j + 1; k <= m; k ++){
                        if(v(i, k) >= 0){
                            t[k] += s[j];
                            break;
                        }
                    }
                }
            }
        }
        for(int j = 1; j <= m; j ++){
            s[j] = t[j];
            // printf("%lld ", s[j]);
        }
        for(int j = 1; j <= m; j ++){
            if(v(i, j) < 0)
            break;
            ans += s[j];
        }
        // printf("*** %lld\n", ans);
    }
    fout << ans;
    return 0;
}