T1
Что-то я не нашел закон природы или типа вызова, для любого человека, вы даете ему существующего кунжутного $ {\ раз} 2 $, то $ {\%} (п + т) $, это время, чтобы приспособиться после количества кунжута его собственного, чтобы думать о том, является ли он человек руками кунжутной относительно маленьким, должна быть правы, если он больше рук кунжут, что человек? Не позволяет, рука играть. ,
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstdio> 3 #define INT долго долго 4 #define maxn 100100000 5 с использованием пространства имен станд; 6 INT п, т, к, по модулю, ми; 7 INT П.Д. [maxn], ЬН [maxn]; 8 INT КСМ ( Int а, INT б) 9 { 10 INT ANS = 1 ; 11 , а (б) 12 { 13 , если (б & 1 ) ANS = (ANS * а)% по модулю; 14 B = B >> 1 ; а = (а * а)% по модулю; 15 } 16 возврата ANS; 17 } 18 основных () 19 { 20 зсапЕ ( " % LLD% LLD% LLD " , & п, & м, & к); 21 мод = п + т; миль = КСМ ( 2 , к); п = (п * мили)% по модулю; 22 Е ( " % LLD \ п " , мин (п, mod - п)); 23 возвращения 0 ; 24 }
T2
Эта проблема также уравнения, название не содержит необходимого юридический раздел $ х <у $ и $ A_x {\%} A_Y = K $ точек, то для любого $ J $, и он может найти от менее его последний соответствуют выше формулам $ I $, что все, что вы можете сделать по закону среднего диапазона, поэтому вопрос сейчас, чтобы найти $ I $
насилие
Первое перечисление $ J $, $ J $ стреловидности над от вперед, чтобы найти ближайший $ I $, расчета взносов, которые были в связи с необходимостью обеспечения того, чтобы мы не соответствуют указанным выше условиям на этой точке, так что каждый $ я найти $, то необходимо обновить $ J $ вперед развертки верхнего левого кругов, потому что для $ J $ $ $ я нашел, это должно быть все найденные ранее и $ I $ взять $ мин $ а, поэтому сложность $ O (N ^ 2) $, очевидно, вода не в прошлом, считают оптимизации
оптимизация
У нас нет никакого способа, чтобы найти каждый $ J $, соответствующий $ I $, без подметать его вперед? Рассмотрим формулу для преобразования выше, чтобы гарантировать, что $ х <у $
$ A_x {\%} A_Y = к $
$ {\ Rightarrow} A_x-п {\} раз A_Y = к $
$ {\ Rightarrow} A_x-к = п {\} раз A_Y $
На этот раз мы обнаружили, что все $ A_Y $ $ A_x-к $ является фактором, то мы можем использовать $ O (\ SQRT {N}) $ сложность отсеивание всех множитель $ A_x-K $ посмотреть на это фактор в $ J $ впереди не там никогда не видели раньше, и максимальное положение, вы можете найти непосредственно то, что мы хотим $ I $
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // J <я分解в [J] -k,找一个下标最小的я 2 #include <iostream> 3 #include <cstdio> 4 #include <вектор> 5 #define maxn 100100 6 #define INT долго долго 7 с использованием пространства имен STD; 8 INT п, к, ANS, хвост; 9 INT A [maxn], ЬН [maxn]; 10 основных () 11 { 12 зсапЕ ( " % LLD% LLD " , & п, & к); Хвост = п; 13 для ( INT I = 1 ; г <= п; ++ I) зсапЕ ( "% LLD " , & [I]); 14 для ( INT I = п, я> = 1 ; - я) // 左端点 15 { 16 INT база = а [я] -k, вправо = хвост + 1 / * 右端点* / ; 17 , если ( базовая < 0 ) продолжать ; 18 , если ( база == 0 ) 19 { 20 для ( INT J = I + 1 , J = <хвост; ++ J) 21 , если(а [J]> а [я]) {вправо = J; перерыв ;} 22 } 23 для ( INT J = 1 , J * J <= база ; ++ , к) 24 { 25 , если ( базовая % J == 0 ) 26 { 27 , если (J> к && ЬН [J]> я) вправо = мин (справа, BH [J]); 28 , если ( базовая / J> к && ЬН [ база / у]> я) вправо = мин (справа, BH [ основание / J]); 29 } 30 } 31 , если(! = правая хвост + 1 ) 32 { 33 ANS + = (хвост-I + 1 ) * (хвост-я + 2 ) / 2 ; 34 ANS + = - (правая-я) * (правая-I + 1 ) / 2 - (хвост направо + 1 ); 35 } 36 хвоста = право- 1 ; BH [а [я]] = I; 37 } 38 ANS + = хвост * (хвост + 1 ) / 2 ; 39 Е ( " % LLD \ п " , ANS); 40 возвращения 0 ; 41 }
T3
Время будет заполнены яма вечером, первые подушки