var f:text; s,t:string; i,n:integer; y:boolean; //признак наличия слова NO
function wr(c:char):boolean; //определяет, буква или нет begin if (c in ['A'..'Z']) or (c in ['a'..'z']) then result:=true else result:=false end;
begin assign(f,'d:/file.txt'); reset(f); repeat readln(f,t); s:=t; y:=false; i:=pos('NO',s); while i>0 do begin n:=length(s); if n=2 then y:=true else begin if i=1 then begin if wr(s[i+2])=false then y:=true; end else if wr(s[i-1])=false then y:=true; end; delete(s,1,i+2); i:=pos('NO',s); end; if y=false then writeln(t); until f.Eof; close(f) end.
Так как тут мизерные ограничения, то для решения конкретно этой задачи можно просто проифать : если n == 5 || n == 125 , то YES , иначе NO
НО мы же не пальцем деланные, да? Поэтому решим задачку и для больших N, с асимптотикой log2(N), используя бинпоиск :
#include < iostream >
#include < cmath >
using namespace std;
bool check(int n){
int l = 0, r = 15;
while(l <= r){
int m = (l + r)/2;
if(pow(5,m) < n)
l = m + 1;
else if(pow(5,m) > n)
r = m - 1;
else
return true;
}
return false;
}
signed main() {
int N;
cin >> N;
check(N) ? cout << "YES" : cout << "NO";
}