c. 真假亞瑟王
題目描述
魔術師梅林在水晶球中預見了莫德雷德的叛逆,她決定在在莫德雷德叛逆之前採取乙個有效的策略保護亞瑟王。輸入具體做法如下:使用魔法將亞瑟王複製成n份,當然,其中只有乙個使真的。她認為這樣就能有效的保護亞瑟王不被殺死。
為了自己能最終找到亞瑟王,她將所有的亞瑟王按1-n編號,並設定了乙個密碼數字x。真亞瑟王的編號是最接近n的且不能被2−x中任何乙個數整除的數。(即真亞瑟王的編號的約數不再2−x中)。
兩個整數x,n,用乙個空格隔開。輸出
真亞瑟王的編號。樣例輸入
3 6樣例輸出樣例輸入
3 4樣例輸出樣例輸入
5 50樣例輸出提示
【資料範圍】解決思路:分類討論對於30%的資料,2≤x
≤n≤10
2≤x≤n≤10
2≤x≤n≤
10對於60%的資料,2≤x
≤n
≤1000
2≤x≤n≤1000
2≤x≤n≤
1000
對於80%的資料,2≤x
≤n≤1
05
2≤x≤n≤10^5
2≤x≤n≤
105對於100%的資料,2≤x
≤n≤1
09
2≤x≤n≤10^9
2≤x≤n≤
109
提示:不合法代表一定不是答案,合法代表一定是答案。**已知:對於整數n
nn,小於等於n
nn且距離最近的素數離n
nn不會太遠,所以直接暴力列舉,判斷素數即可。
第一類:x2≥
nx^2 \ge n
x2≥n
1、因為乙個合數肯定有乙個小於等於根號的因子,所以小於等於n
nn的所有合數的最小因子必然在區間[2,
x]
[2,x]
[2,x
]內,因此[2,n
]2,n]
2,n]
的合數不合法。
2、[ 2,
x]
[2,x]
[2,x
]的每個數不合法。
綜上所述,[x+
1,n]
[x+1,n]
[x+1,n
]的素數可能合法。
暴力判斷小於等於n
nn且距離最近的素數(前提是大於等於x+1
x+1x+
1或者大於xxx)
若存在素數,輸出素數。
若不存在素數,輸出1
11(由於[2,
n]
[2,n]
[2,n
]中沒有乙個數合法,只剩下數字1
11了)
第二類:x
2<
nx^2 < n
x2<
n1、因為乙個合數肯定有乙個小於等於根號的因子,所以小於等於x
2x^2
x2的所有合數的最小因子必然在區間[2,
x]
[2,x]
[2,x
]內,因此[2,
x2
][2,x^2]
[2,x2]
的合數不合法,但是[x2
+1,n
][x^2+1,n]
[x2+1,
n]的合數可能合法。
例如:x=2
,n=99
x=2,n=99
x=2,n=
99時,99
9999
合法但是是合數。
2、[ x+
1,n]
[x+1,n]
[x+1,n
]的素數可能合法。
綜上所述,從n
nn開始往小於n
nn的數開始判斷,如果這個數是素數或者它不是[2,
x]
[2,x]
[2,x
]中任意數的倍數的話,輸出這個數即可(直接列舉小於根號的因子判斷是否在[2,
x]
[2,x]
[2,x]內)
#include
#include
#include
#include
#include
using
namespace std;
#define mod 77797
typedef
long
long ll;
const
int n =
2e1+10;
const ll inf =
0x3f3f3f3f3f3f3f3f
;bool
judge
(int n,
int x)
}return
true;}
bool
isprime
(ll n)
}return
true;}
intmain()
n--;}
cout <<
1<< endl;
return0;
}else
n--;}
}return0;
}
題解 亞瑟王的宮殿
在此之前,該題已經有很多題解,但它們大多是列舉國王周圍 5 times 5 的範圍 玄學貪心?最後計算最小距離。雖然能 ac 但其實這種做法是不嚴謹的 詳見巨佬的hack資料 然而將 5 times 5 的範圍擴大至 r times c 的範圍後,時間複雜度過大。那麼,這道題真的無解了嗎?蒟蒻的我用...
概率 亞瑟王
題目描述 小 k 不慎被 ll 邪教 了,程度深到他甚至想要從亞瑟王邪教中脫坑。他決定,在脫坑之前,最後再來打一盤亞瑟王。既然是最後一戰,就一定要打得漂亮。眾所周知,亞瑟王是乙個看臉的遊戲,技能的發動都是看概率的。作為乙個非洲人,同時作為乙個前 oier,小 k 自然是希望最大化造成傷害的期望值。但...
usaco3 3 4亞瑟王的宮殿
對於騎士帶王去會合的情況,列舉王的原位置和八個方向,也就是說王和騎士的匯合點相對於王的原位置為上下左右或者斜45度方向。比如在8 8的棋盤上,王的位置用k表示,需要列舉的帶王的點用1表示,其餘點用0表示則有下圖 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 1 1 0 0 ...