noip胡測之8 15(沒有正解)

2021-08-06 05:59:53 字數 2793 閱讀 8064

(joseph.cpp/c/pas)

【問題描述】

yjc 很喜歡玩遊戲,今天他決定和朋友們玩約瑟夫遊戲。

約瑟夫遊戲的規則是這樣的:n 個人圍成一圈,從 1 號開始依次報數,當報到 m 時,報 1、2、…、m-1 的人出局,下乙個人接著從 1開始報,保證(n-1)是(m-1)的倍數。最後剩的乙個人獲勝。

yjc 很想贏得遊戲,但他太笨了,他想讓你幫他算出自己應該站在哪個位置上。

【輸入格式】

第一行包含兩個整數 n 和 m,表示人數與數出的人數。

【輸出格式】

輸出一行,包含乙個整數,表示站在幾號位置上能獲得勝利。

【輸入輸出樣例】

joseph.in

10 10

joseph.out

10 【資料說明】

對於 30%的資料,滿足 2≤n≤1000;

對於 50%的資料,滿足 2≤n≤1000000;

對於 100%的資料,滿足 2≤m≤n<263-1 且(n-1)是(m-1)的倍數。

分析:

先說一下我的騙分:

打表發現,答案(幾乎,大佬說有特例)等於n/m*m

再加上30分的暴力,妥妥50

看一下正解:

我們來一句一句解釋:

第一句挺簡單

now是現在有的人數,last是上次%m的餘數

當now=m時,last是一定要被踢掉的,

now-last計算的就是,在剩下的除了餘數的m的倍數中,留下的是第幾個

第二句就是遞迴了

最後一句計算答案

t*m計算的就是相對於上一層

答案是第幾個

(以上一層最後乙個整除位之後的那一位為第一位,說白了就是不算餘數)

因為上一層還有一定的餘數,所以最後要減去last

看乙個大一點的樣例

這裡寫**片

#include

#include

#include

#define ll long long

using namespace std;

ll n,m;

ll solve(ll now,ll last)

int main()

(password.cpp/c/pas)

【問題描述】

yjc 很喜歡玩遊戲,今天他決定和朋友們玩密碼遊戲。

密碼遊戲的規則是這樣的:初始時有兩個大小為 m 的陣列 a 和 b,分別是 0~m-1 的一

個排列。每一次操作在 0~m-1 之間選乙個數 x,求出結果 y=b[a[x]],把 x 和 y 寫下來。之

後,a 陣列向前迴圈移動一次,即(a[0],a[1],…,a[m-2],a[m-1])變成(a[1],a[2],…,a[m-1],a[0])。

當 a 陣列變回初始狀態時,b 陣列向前迴圈移動一次。現在知道所有的 x 和 y,如果 yjc 能

求出任意一組符合條件的 a 和 b 的初值,yjc 就贏了。

yjc 很想贏得遊戲,但他太笨了,他想讓你幫他算出 a 和 b 的初值。

【輸入格式】

第一行包含兩個整數 n 和 m,表示操作了多少次和 a、b陣列的大小。

第二行包含 n 個整數,第 i個數表示第 i次選出的 x。

第二行包含 n 個整數,第 i個數表示第 i次求出的 y。

【輸出格式】

第一行包含 m 個整數,表示 a的初值。

第二行包含 m 個整數,表示 b的初值。如果有多組答案,輸出任意一組即可。

【輸入輸出樣例】

password.in

4 2

0 0 0 0

0 1 1 0

password.out

0 1

0 1

【資料說明】

對於 30%的資料,滿足 m≤5,n≤1000。

對於 100%的資料,滿足 2≤m≤26,m2≤n≤100000,保證資料隨機,且存在至少一組 a和 b。

分析:

考場上寫30分暴力

然而我是先暴力構造a串,之後再通過x和y構建b,只要找到一對合法就輸出,這樣就玄學的拿了40分

這裡寫**片  //40%

#include

#include

#include

using

namespace

std;

const

int n=100010;

int n,m;

int x[n],y[n],a[30],b[30];

bool p[30],ff=0;

int pd()

t1=0;

for (i=0;iif (b[i]==-1)

for (i=0;iprintf("%d ",a[i]);

puts("");

for (i=0;iprintf("%d ",b[i]);

return1;}

void ss(int t)

if (ff) return;

for (int i=0;iif (p[i])

if (ff) return;

}int main()

noip胡測之8 15(沒有正解)

t1 約瑟夫遊戲 joseph.cpp c pas 問題描述 yjc 很喜歡玩遊戲,今天他決定和朋友們玩約瑟夫遊戲。約瑟夫遊戲的規則是這樣的 n 個人圍成一圈,從 1 號開始依次報數,當報到 m 時,報 1 2 m 1 的人出局,下乙個人接著從 1開始報,保證 n 1 是 m 1 的倍數。最後剩的乙...

NOIP模擬 字胡串(單調棧)

只剩5分鐘的時候打了乙個三重迴圈。完全沒想到固定左端點減少1個n。被diss了一波。對於乙個區間,如果他合法,那麼一定是有乙個非最大數在二進位制下與最大數有不同的地方,所以對於乙個數,利用單調棧記錄他作為最大數的區間 左右第乙個至少有一位與他不同的地方,利用容斥原理計算一下統計答案即可,複雜度 然後...

《監控》之胡哥

這個非常偶然的突發事件,也讓我重新回到了以前的那些是是非非中。在乙個人的一生中,可能會遇到很多人,有些人可能與你的人生擦肩而過,再也不會遇到。而有些人,會多少年以後再重新遇到。有時候重新遇到也就是擦肩而過,有時候重新遇到又是一段故事。這個事情的關鍵,和乙個人有關。而這個人還得從十幾年前的一些事情說起...