NOIP 模擬題 小G的城堡

2021-08-09 18:26:22 字數 1471 閱讀 7798

檔名 輸入檔案 輸出檔案 時間限制 空間限制

castle.pas/c/cpp castle.in castle.out 1s 128mb

題目描述

小 g 家有一座城堡。城堡裡面有 n 個房間,每個房間上都寫著乙個數字 p i 。小

g 拉著幾個小夥伴在城堡裡面玩耍, 他們約定, 如果某個人當前站在 i 房間裡面, 下

一步這個人就會去 p i 房間,再下一步這個人去 p p i 。

為了增加趣味性,小 g 想重新書寫每個房間的 p i ,以滿足:

• 如果從編號 1 到 k 中的某個房間開始,按照規則走,必須能夠走到 1 號房間。

特別地,如果從 1 號房間開始走,也要能夠走回 1 號房間(至少走一步,如果

p 1 = 1,從 1 走到 1 也算合法) 。

• 如果從編號大於 k 的某個房間開始,按照規則走,一定不能走到 1 號房間。

小 g 想知道,有多少種書寫 p i 的方案,可以滿足要求。

輸入格式

輸入檔案一行兩個數字 n,k,含義如題。

輸出格式

輸出檔案乙個數字,表示合法的方案數。答案對 10^9 + 7 取模。

樣例輸入 1

5 2

樣例輸出 1

54 樣例輸入 2

7 4

4 樣例輸出 2

1728

資料範圍

對於 40% 的資料,1 ≤ n ≤ 8

對於 70% 的資料,1 ≤ n ≤ 10 5

對於 100% 的資料,1 ≤ n ≤ 10 18 ,1 ≤ k ≤ min(8,n)。

考試的時候把模數打成了1e9+9,qaq ,直接100->40。內心是很受傷害的。

手玩樣例找規律是可以找出來的。

做法:

– n<=8

– 直接爆搜每個點的出邊指向誰,然後檢查即可。

– n<=10^5

– 我們發現,前k個點肯定和前k個點互相連邊。

後n-k個點肯定不會連到前k個點裡面去。

– 所以,我們只要爆搜前k個點連線的方案,然後

檢查;後n-k個點,只要連的是後n-k個點,愛

怎麼連怎麼連,方案數是(n-k)^(n-k)。最後把

兩部分方案數乘起來就行。

– n<=10^18

– 快速冪即可。

#include

#include

#include

#include

#define ll long long

using namespace std;

const int mod=1000000007;

ll n,k,ans;

ll q_pow(ll x,ll p)

returns;}

int main()

NOIP模擬題 連通

給定乙個無向圖,請編寫乙個程式實現以下兩種操作 1 d x y,從原圖中刪除連線x和y頂點的邊。2 q x y,詢問x和y頂點是否連通。這也是連通問題,考慮用並查集解決。但是這是刪除的問題耶,怎麼辦?考慮將刪除變為連通,能不能將所有操作給反過來,從最後乙個操作開始處理。當然是可以的。include ...

Noip模擬題 山峰

description在n m的棋盤上不重複的填1到n m 如果乙個數字比周圍的八個數字大,那麼他就是乙個山峰。現在告訴你所有山峰的位置,問你填數的方案數mod 12345678 input 輸入第一行兩個數字 n m意義如題目描述。接下來n 行,每行 m個字元,表示非山峰,x 表示山峰。1 n 4...

NOIP模擬題 訂餐

題目描述 這個週末,joe 一如既往的拿出了外賣的點餐單。選單上從上到下列著 n 個菜,每個菜 joe 會列出乙個美味值。joe 這次希望從選單上連續地點 k 個菜,並且美 味值之和最大。但在計算美味值之和時,joe 有自己的一套計算方法 由於他會按照順序享受這 k 個菜,並且越吃越後面的菜他就越享...