Ваня и Весы - 552C Codeforces (мышление)

Эффект: $ в $ 101 вес, вес $ ш ^ 0, ш ^ 1, ..., ж ^ 100 $, можно найти весила $ м $.

 

ш <= 3, когда по-видимому, можно назвать весь вес, в противном случае вы можете двухсторонний поиск насилие.

#include <iostream> 
#include <sstream> 
#include <алгоритм> 
#include <cstdio> 
#include <math.h> 
#include <набор> 
#include <карта> 
#include <unordered_map> 
#include <очереди> 
#include < строка> 
#include <string.h> 
#include <BitSet> 
#define РЭП (я, а, п) для (INT I = а, я <= п; ++ я) 
#define ПЕР (я, а, п) для (INT I = п; I> = а; - я) 
#define ч putchar (10) 
#define пб push_back 
#define LC (O << 1) 
#define гс (ЖХ | 1) 
#define середины ((л + г) >> 1) 
#define Ls LC, л, средний 
#define RS гс, середина + 1,г 
#define х первый 
#define у второго  
#define -го станда :: IOS :: sync_with_stdio (ложь)
#define Endl '\ N' 
#define БД (а) ({REP (__ я, 1, п) соиЬ << а [__ я] <<»«; ч;}) с 
использованием пространства имен станд; 
ЬурейеЕ долго долго LL; 
ЬурейиЙ пар <Int, Int> PII; 
Const INT Р = 1e9 + 7, Р2 = 998244353, INF = 0x3f3f3f3f; 
LL НОД (LL а, Л.Л. б) {возвращение Ь НОД (Ь, а% б): а;} 
LL qpow (LL а, Л.Л. п) {LL г = 1% Р, ибо (в% = Р; п ; а = а * а% Р, п >> = 1) , если (п & 1) г = г * а% Р; возвращение г;} 
LL INV (LL х) {вернуться х <= 1 1: INV (Р% х) * (ПП / х)% р;} 
инлайн INT - й () {INT х = 0; р = символ GetChar (), в то время (р < '0' || р> '9') р = GetChar () , тогда как (р> = '0' && р <= '9') х = х * 10 + р-'0' , р = GetChar (); возвращение х;} 
// головка 




Int W, м; 
LL [100]; 
unordered_map <LL, Int> F [2]; 
недействительными ДФС (Int, Int д х,
	еще {
		ДФС (д + 1, х, Num + а [г], е); 
		ДФС (д + 1, х, Num-а [d], е); 
	} 
} 

INT основных () { 
	зсапЕ ( "% d% d", & ш, & м); 
	если (ш <= 3) возвращает (путы "ДА"), 0; 
	Теперь LL = 1; 
	REP (я, 0.16) { 
		а [++ * а] = Теперь; 
		Теперь * = ш; 
	} 
	ДФС (1, * а / 2,0, F [0]); 
	ДФС (* а / 2 + 1, * а, 0, е [1]); 
	для (авто && т: F [0]) { 
		если (е [1] .Count (t.x + M)) возвращают пут ( "ДА"), 0; 
	} 
	Ставит ( "НЕТ"); 
}

 

 

Есть на самом деле лучший подход.

#include <iostream> 
#include <sstream> 
#include <алгоритм> 
#include <cstdio> 
#include <math.h> 
#include <набор> 
#include <карта> 
#include <unordered_map> 
#include <очереди> 
#include < строка> 
#include <string.h> 
#include <BitSet> 
#define РЭП (я, а, п) для (INT I = а, я <= п; ++ я) 
#define ПЕР (я, а, п) для (INT I = п; I> = а; - я) 
#define ч putchar (10) 
#define пб push_back 
#define LC (O << 1) 
#define гс (ЖХ | 1) 
#define середины ((л + г) >> 1) 
#define Ls LC, л, средний 
#define RS гс, середина + 1,г 
#define х первый 
#define у второго  
#define -го станда :: IOS :: sync_with_stdio (ложь)
#define Endl '\ N'
#define БД (а) ({REP (__ я, 1, п) соиЬ << а [__ я] <<»«; ч;}) с 
использованием пространства имен станд; 
ЬурейеЕ долго долго LL; 
ЬурейиЙ пар <Int, Int> PII; 
Const INT Р = 1e9 + 7, Р2 = 998244353, INF = 0x3f3f3f3f; 
LL НОД (LL а, Л.Л. б) {возвращение Ь НОД (Ь, а% б): а;} 
LL qpow (LL а, Л.Л. п) {LL г = 1% Р, ибо (в% = Р; п ; а = а * а% Р, п >> = 1) , если (п & 1) г = г * а% Р; возвращение г;} 
LL INV (LL х) {вернуться х <= 1 1: INV (Р% х) * (ПП / х)% р;} 
инлайн INT - й () {INT х = 0; р = символ GetChar (), в то время (р < '0' || р> '9') р = GetChar () , тогда как (р> = '0' && р <= '9') х = х * 10 + р-'0' , р = GetChar (); возвращение х;} 
// головка 





INT основных () { 
	Int W, м ; 
	зсапЕ ( "% d% d", & ш, & м); 
	в то время как (м) { 
		если ((М-1)% вес == 0) --m; 
		м / = ш; 
	}
		иначе , если ((т + 1)% вес == 0) ++ м;
		остальное , если (м% ж) возвращают пут ( "НЕТ"), 0; 
	ставит ( "ДА"); 
}

 

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

отwww.cnblogs.com/uid001/p/10951071.html