Крупный рогатый скот-офф тест матч О.И. 1

Тема ссылка:  https://www.nowcoder.com/acm/contest/181#question

А. Feibolaqi

Запрос $ F [N-1] * F [N + 1] -f [п] ^ 2 $, $ F [N] $ является номер столбца Feibolaqi $ $ N-пунктов

Подсчитайте первые несколько трудно найти ответы на $ (- 1) ^ N $, доказать это с помощью математической индукции следующее:

$ N = 2 $, гипотеза

Пусть $ N =-гипотезы, когда к $, т.е. $ F [K-1] * F [K + 1] -f [K] ^ 2 = (- 1) ^ K $

При $ N = время $ К, $ F [K] F [К + 2] -f [К + 1.] ^ 2 = Р [К] (Р [К + 1.] + Ж [K]) - F [K +1] (F [K] + F [K-1]) = F [K] ^ 2-F [K-1] F [K + 1] = (- 1) ^ {k + 1} $

доказано

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
#include <CString> 
символ с [1000005]; 
используя патезрас; 
INT основных () { 
    зсапЕ ( "% s", s); 
    INT л = StrLen (ы); 
    INT г = ы [л-1] - '0'; 
    если (г% 2 == 0) 
        соиЬ << 1 << епсИ; 
    еще соиЬ << - 1 << епсИ; 
}

B. отправить подтемы

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
использованием пространства имен станд; 
BOOL отношению [10005]; 
Int А [10005]; 
вектор <Int> анс; 
INT основных () { 
    долго долго а, б; 
    CIN >> A >> б; 
    соиЬ << A + B << епсИ; 
}

C. Последовательность

Насилие, как, сначала найти каждый префиксы в последовательности и, с картой и указывает на то, что префикс существует для каждого запроса сначала необходимо определить , является ли спросил , прежде чем к, спросил, не суд, а затем судить ли последовательность к кратные, в противном случае. 1 за $ (СУММА / Z) ~ к (СУММА / Z) $ и является ли префиксами присутствуют

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
#include <CString> 
#include <карта> с 
помощью патезрасе; 
ЬурейеЕ долго долго LL; 
Const INT maxn = 100005; 
INT ANS [maxn]; 

LL а [maxn]; 
карта <Л.Л., Int> тр; 

INT основных () { 
    Int N, Q; 
    зсапЕ ( "% d% d", & п, & д); 
    LL сумма = 0; 
    для (INT = 1; г <= п; я ++) { 
        Scanf ( "% LLD", & A [I]); 
        сумма + = а [I]; 
        Т. пл [сумма] = 1; 
    } 
    Для (INT = 1; я <= д; я ++) { 
        INT г; 
        зсапЕ ( "% d", & г); 
        если (г> п ||% Сумма г!
        } 

        Если (ВНС [г] == 1) { 
            Е ( "Да \ п"); 
            Продолжить; 
        } 
        Для (INT I = 1, я * (сумма / г) <сумма, я ++) { 
            если (тр [я * (сумма / г)] = 1) { 
                Е ( "Нет \ п"); 
                ANS [г] = 2; 
                перерыв; 
            } 
        } 
        Если (ВНС [Z] = 2!) { 
            Е ( "Да \ п"); 
            ANS [г] = 1; 
        } 
    } 
}

D. листовки инспекции

Искомый нижний диаметр как

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
#include <CString> с 
использованием пространства имен станд; 
Const INT maxn = 100005; 
вектор <пара <Int, Int>> г [maxn]; 
INT д [maxn]; 
BOOL отношению [maxn]; 
недействительными ДФС (интермедиат и) { 
    отношению [и] = 1; 
    для (INT I = 0; я <г [и] .size (); я ++) { 
        INT V = г [и] [I] .first; 
        если (! Vis [v]) { 
            d [v] = D [и] + д [и] [I] .second; 
            ДФС (v); 
        } 
    } 
} 
INT основной () { 
    Int N; 
    зсапЕ ( "% d", & п); 
    для (INT = 1; <п; я ++) { 
        INT х, у, г; 
        зсапЕ (»
        г [х].
        г [у] .push_back (make_pair (х, г)); 
    } 
   // соиЬ << - 1 << епсИ; 
    ДФС (1); 
    INT НКТ; 
    долго долго Dmax = 0; 
    для (INT = 1; г <= п; я ++) { 
        если (д [I]> Dmax) { 
            Dmax = d [I]; 
            CNT = я; 
        } 
        Отношению [I] = 0; 
        д [I] = 0; 
    } 
    Dmax = 0; 
    ДФС (CNT); 
    для (INT = 1; г <= п; я ++) { 
        если (д [I]> Dmax) { 
            Dmax = d [I]; 
        } 
    } 
    СоиЬ << Dmax * 10 + (1 + Dmax) * Dmax / 2 << епсИ; 
}

E. Путешествия лягушка

Взлет длинной последовательности, но чувствует, что Италия имеет проблему, описать тему не должен подниматься длинной последовательностью 233, п относительно велико, с $ O (N * журнал N) $ формулировки

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
#include <CString> с 
использованием пространства имен станд; 
Const INT maxn = 100005; 
INT дп [maxn]; 
Int А [maxn]; 
Int N; 
INT основных () { 
    зсапЕ ( "% d", & п); 
    для (INT = 1; г <= п; я ++) 
        зсапЕ ( "% d", & A [I]); 
    INT CNT = 0; 
    дп [0] = - 1e9; 
    для (INT = 1; г <= п; я ++) { 
        если (а [я]> = дп [CNT]) { 
            дп [++ CNT] = а [I]; 
        } 
        Еще { 
            INT г = upper_bound (дп + 1, дп + 1 + CNT, а [I]) - дп; 
            дп [г] = а [I]; 
        } 
    }
}

иерархия ребенка F.

Известный смысл вопросов, ответы последовательности порядка независимы, так что первый ряд порядка последовательности для г-го последовательности, умножается на число требуемых C $ {-n-K 1.} ^ {} 1 -. C {я-1} ^ {к -1} {-C_ п} ^ {к-1} $. И 1e9 + 7 простое число, согласно Эйлера формула $ а ^ {п-1} \ equiv1mod р $

Вы можете получить ответ

# include <cstdio> 
#include <алгоритм> 
#include <вектор> 
#include <iostream> 
#include <CString> 
#include <карта> с 
помощью патезрасе; 
ЬурейеЕ долго долго LL; 
Const LL мод = 1e9 + 7; 
Const INT maxn = 1005; 

LL PMOD (LL а, б LL) { 
    если (а == 0) возвращает 0; 
    если (б == 0) возвращает 1; 
    если (б == 1) возвращает% моды; 
    LL ANS = PMOD (а, б / 2); 
    ANS = ANS * ANS% по модулю; 
    если (б & 1) 
        вернуть анс * A% мода; 
    вернуться анс; 
} 
LL а [maxn]; 
LL с [maxn] [maxn]; 
INT основных () { 
    для (INT I = 0; г <= 1000; я ++) 
        с [I] [0] = 1; 
    с [1] [1] = 1;
    для (INT = 1; г <= 1000; я ++) 
        с [I] [I] = 1; 
    для (INT I = 1; г <= 1000; я ++) , 
        для (Int J = 1, J <я; j ++) 
        с [I] [J] = (с [I-1] [J] + C [i- 1] [J-1])% (мод-1); 
    ИНТ т; 
    зсапЕ ( "% d", & т); 
    в то время как (T -) { 
        Int N, K; 
        зсапЕ ( "% d% d", & п, & к); 
        для (INT = 1; г <= п; я ++) 
            зсапЕ ( "% LLD", & A [I]); 
        сортировки (а + 1, а + 1 + N); 
        LL ANS = 1; 
        для (INT I = 2; <п; я ++) { 
            LL г = С [п-1] [K-1]; 
            если (п> = к-1) 
                Z- = с [п] [K-1]; 
            если (I-1> = к-1) 
                Z- = с [I-1] [K-1];
            г = PMOD (а [I], г); 
            ANS = ANS * г% по модулю; 
        } 
        Е ( "% LLD \ п", ANS); 
    } 
    Возвращает 0; 
}

  

 

рекомендация

отwww.cnblogs.com/dlutjwh/p/10976341.html