Concurso en línea ICPC Shenyang 2019 Agua feliz de K. Guanguan

Concurso en línea ICPC Shenyang 2019 Agua feliz de K. Guanguan


La idea principal del tema : Conocer una secuencia f(n):
f[x]=a[x] (1<=x<=k)
f[x]=f[x-1]*p[1 ]+f[x -2]*p[2]………+f[xk]*p[k] (x>k
)

Déle todo a[i], y luego déle el siguiente k f[i], encuentre la suma de los primeros n elementos de la secuencia f.

Solución : El AC del primer lugar en 10 minutos, ¿es una distorsión de la naturaleza humana o una pérdida de moralidad? Eliminación gaussiana más suma de matriz proporcional, nuestro grupo escribió durante mucho tiempo, WA, TLE. Solo ríndete.
Equipos de la misma escuela después del juego : Si n<=k, suma directamente la salida; si n>k, primero encuentra la suma de la primera k, y luego cada k es una sección del ciclo, y la respuesta es directamente suma[ k]+ciclo Sección suma *(n/k-1)+f[k+1]+...+f[n%k+k].
nmd, wsm??
Jugué el medidor durante mucho tiempo y escribí tantas fórmulas. ¿Me dijiste que todo había terminado? ? ? ? ! ! ! !
Acabo de encontrar un conjunto de datos y te pirateé. Me atrevo a enviar este tipo de código. Me temo que no leí la pregunta.
Luego envié una publicación. Esta es mi expresión:
inserte la descripción de la imagen aquí
El siguiente es el código AC incorrecto. :

#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
const int N = 1005;
const int M = 1000000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1);
const double eps = 1e-8;
#define ms(x, y) memset((x), (y), sizeof(x))
#define mc(x, y) memcpy((x), (y), sizeof(y))
typedef long long ll;
typedef unsigned long long ull;
#define fi first
#define se second
#define mp make_pair
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
#define bg begin
#define ed end
#define pb push_back
#define al(x) (x).bg(), (x).ed()
#define st(x) sort(al(x))
#define un(x) (x).erase(unique(al(x)), (x).ed())
#define fd(x, y) (lower_bound(al(x), (y)) - (x).bg() + 1)
#define ls(x) ((x) << 1)
#define rs(x) (ls(x) | 1)
template <class T>
bool read(T & x) {
    
    
    char c;
    while (!isdigit(c = getchar()) && c != '-' && c != EOF);
    if (c == EOF) return false;
    T flag = 1;
    if (c == '-') {
    
     flag = -1; x = 0; } else x = c - '0';
    while (isdigit(c = getchar())) x = x * 10 + c - '0';
    x *= flag;
    return true;
}
template <class T, class ...R>
bool read(T & a, R & ...b) {
    
    
    if (!read(a)) return false;
    return read(b...);
}
mt19937 gen(steady_clock::now().time_since_epoch().count());
int a[N];
int main()
{
    
    
    time_point<steady_clock> start = steady_clock::now();

    int T, k;
    ll n;
    read(T);
    while (T--) {
    
    
        read(k, n);
        for (int i = 1; i <= 2 * k; i++) read(a[i]);
        ll sum = 0;
        for (int i = 1; i <= min(1LL * k, n); i++) (sum += a[i]) %= M;
        if (n / k > 1) {
    
    
            ll tmp = 0;
            for (int i = k + 1; i <= 2 * k; i++) (tmp += a[i]) %= M;
            ll kk=((n/k)-1)%M;
            sum = (sum + tmp * kk%M) % M;
        }
        if (n / k > 0) {
    
    
            for (int i = 1; i <= n % k; i++)
                (sum += a[i + k]) %= M;
        }
        printf("%lld\n", sum);
    }

   // cerr << endl << "------------------------------" << endl << "Time: "
    //     << duration<double, milli>(steady_clock::now() - start).count()
     //    << " ms." << endl;

    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/yzsjwd/article/details/100834241
Recomendado
Clasificación