100分求助,Subtask #1TLE

P2671 [NOIP2015 普及组] 求和

别用cin
by masiyudr @ 2023-10-10 17:17:28


```cpp #include <bits/stdc++.h> #define int long long using namespace std ; const int N = 10007 ; int n , m , u[100005] , c[100005] , ans ; vector <int> v[100005][2] ; signed main() { cin >> n >> m ; for(int i = 1 ; i <= n ; i++) { scanf("%lld" , &u[i]) ; u[i] %= N ; } for(int i = 1 ; i <= n ; i++) scanf("%lld" , &c[i]) ; if(n <= 3000) { for(int i = 1 ; i <= n ; i++) { for(int j = i + 2 ; j <= n ; j += 2) { if(c[i] == c[j]) ans = (ans + (i + j) * (u[i] + u[j])) % N ; } } printf("%lld" , ans) ; return 0 ; } for(int i = 1 ; i <= n ; i++) v[c[i]][i % 2].push_back(i) ; for(int i = 1 ; i <= m ; i++) { for(int j = 0 ; j < v[i][0].size() ; j++) { for(int k = j + 1 ; k < v[i][0].size() ; k++) { if(!((v[i][0][k] - v[i][0][j]) & 1)) ans = (ans + (v[i][0][j] + v[i][0][k]) * (u[v[i][0][j]] + u[v[i][0][k]])) % N ; } } for(int j = 0 ; j < v[i][1].size() ; j++) { for(int k = j + 1 ; k < v[i][1].size() ; k++) { if(!((v[i][1][k] - v[i][1][j]) & 1)) ans = (ans + (v[i][1][j] + v[i][1][k]) * (u[v[i][1][j]] + u[v[i][1][k]])) % N ; } } } printf("%lld" , ans) ; return 0 ; } ``` @[mjb023](https://www.luogu.com.cn/user/982155) 大佬,已修改,还是TLE。
by lihongqian__int128 @ 2023-10-10 20:59:56


@[LHQ_lihongqian](/user/770891) 不是正解吧 [我的](https://www.luogu.com.cn/record/128882746)才116ms
by _8008008 @ 2023-10-12 13:08:53


|