題目大意
如果一個數 \(x\) 滿足:為 \(7\) 的倍數或 \(x\) 的數字中含有 \(7\),\(f(x)=1\);反之則 \(f(x)=0\)。
給定 \(T\) 組數據,對於每組數據:
給定一個正整數 \(n\),如果 \(a\times k=n(a,k\) \(\texttt{均為正整數且}\) \(f(a)=1\) \()\),則輸出 \(-1\)。
否則,找出第一個嚴格大於 \(n\) 的數 \(p\) 滿足 \(f(r)=0(r\) \(\texttt{為 p 的因數}\) \()\) \(\texttt{且}\) \(r\times k=p\)。
題目分析
考試的時候直接降智,這就是個裸的變種篩數。思考 \(10~min\) 沒有思路,只打了暴力分。
\(70\) 分部分
思路
對於每個詢問,在線回答。
直接暴力判斷大於 \(n\) 的數字中是否含有不符合條件的因數。
如果找到了滿足條件的,直接輸出即可。
民間數據 \(70\) 分。
代碼
還是給個吧。
int T,n;
inline bool chk(int x)
{
while(x!=0)
{
if(x%10==7)
{
return true;
}
x/=10;
}
return false;
}
inline bool solve(int x)
{
for(register int i=1;i*i<=x;i++)
{
if(x%i==0)
{
if(chk(i)==true || chk(x/i)==true)
{
return true;
}
}
}
return false;
}
int main(void)
{
T=read();
while(T--)
{
n=read();
if(solve(n)==true)
{
puts("-1");
continue;
}
for(n=n+1;;n++)
{
if(chk(n)==false && solve(n)==false)
{
break;
}
}
printf("%d\n",n);
}
return 0;
}
\(100\) 分部分
思路
考時就想到了,由於算錯時間復雜度,覺得肯定會炸,於是打了 \(70\) 分跑路。
考后發現了自己的 zz 錯誤。
講一下做法:
先預處理出 \(1\sim 10^7+5\) 內所有不滿足條件的數。(注意這里的邊界)
如果經過判斷一個數 \(x\) 滿足 \(f(x)=1\),那么它的所有倍數都一定滿足 \(f(xk)=1\)。如果 \(x\) 滿足 \(f(x)=0\),那么把它加入 \(num\) 數組中。
然后詢問的時候:二分查找 \(num\) 數組中有沒有這個數(可以用 binary_search
或 lower_bound
,如果用 lower_bound
,可以判斷結果是否等於 \(n\),如果不等於,那么輸出 \(-1\))。
隨后二分查找在 \(num\) 數組中第一個大於等於 \(n+1\) 的數,輸出這個數即可。
代碼
const int ma=1e7+5;
int num[ma];
bool mark[ma];
int T,n;
int idx;
inline bool chk(int x)
{
while(x!=0)
{
if(x%10==7)
{
return true;
}
x/=10;
}
return false;
}
inline void init(int ri)
{
for(register int i=1;i<=ri;i++)
{
if(chk(i)==true)
{
mark[i]=true;
}
if(mark[i]==false)
{
num[++idx]=i;
}
else
{
for(register int j=i*2;j<=ri;j+=i)
{
mark[j]=true;
}
}
}
}
int main(void)
{
init(ma);
T=read();
while(T--)
{
n=read();
if((*lower_bound(num+1,num+idx+1,n))!=n)
{
puts("-1");
}
else
{
int p=*lower_bound(num+1,num+idx+1,n+1);
printf("%d\n",p);
}
}
return 0;
}
\(\rm BB~In~Last\)
這次 NOIP 直接掛完了,感覺自己學一年的 \(\verb!OI!\) 簡直是個笑話。
人們總是說,時間是世界上最公平的,時間也是世界上最不公平的。我記住了,但沒有真正理解,現在,我想我理解了。世界上沒有真正的感同身受,即使把這條道理抄成千上萬遍,也沒有親身經歷過一次來的實在。
對於我這種一年時間幾乎 \(\dfrac{3.7}{12}\) 的時間都在頹廢的人,時間總是悄悄的從我的手中、鍵盤上溜走,等我緩過神來,往往已經是深夜了。
更讓我感到絕望的是:有天賦的人往往比普通人更為勤奮。
可笑的是,這一年內,我就這樣木然地看着旁人和自己的差距越拉越大,興致來了,感嘆幾句,然后繼續頹廢。
已經初二了,我還有多少時間啊......
\(\texttt{\color{blue}即使沒有舞台,你也要做你人生的主角。}\)