t1 約瑟夫遊戲
(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()
t2 密碼遊戲
(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(沒有正解)
joseph.cpp c pas 問題描述 yjc 很喜歡玩遊戲,今天他決定和朋友們玩約瑟夫遊戲。約瑟夫遊戲的規則是這樣的 n 個人圍成一圈,從 1 號開始依次報數,當報到 m 時,報 1 2 m 1 的人出局,下乙個人接著從 1開始報,保證 n 1 是 m 1 的倍數。最後剩的乙個人獲勝。yjc ...
NOIP模擬 字胡串(單調棧)
只剩5分鐘的時候打了乙個三重迴圈。完全沒想到固定左端點減少1個n。被diss了一波。對於乙個區間,如果他合法,那麼一定是有乙個非最大數在二進位制下與最大數有不同的地方,所以對於乙個數,利用單調棧記錄他作為最大數的區間 左右第乙個至少有一位與他不同的地方,利用容斥原理計算一下統計答案即可,複雜度 然後...
《監控》之胡哥
這個非常偶然的突發事件,也讓我重新回到了以前的那些是是非非中。在乙個人的一生中,可能會遇到很多人,有些人可能與你的人生擦肩而過,再也不會遇到。而有些人,會多少年以後再重新遇到。有時候重新遇到也就是擦肩而過,有時候重新遇到又是一段故事。這個事情的關鍵,和乙個人有關。而這個人還得從十幾年前的一些事情說起...