題目描述:
解題過程:
最初以為是乙個迴圈節問題,樣例確實是迴圈的,多寫幾組就發現了。但是,其實是乙個坑,根本不是什麼迴圈節。於是我直接暴力做了一遍,過了一半資料:
#include
using namespace std;
const
int maxn=
1e6+7;
typedef
long
long ll;
intmain()
a[pos++
]=num;
}for
(int i=
0;icout<
return0;
}
不難想到,資料量級太大時會出現棧溢位,超時等問題。於是,參考網上大佬的解法:我們不需要關心其他人報的什麼數,只需要看棟棟報的數是多少。每個人報數字的大小都會比之前大一,也就是每次增加的值1,2,3,4,5,…n這樣乙個數列。對於棟棟的三次報數1,7,9是這樣得來的,(1+(1+2+3))%k=7 ,(1+(1+2+3+4+5+6))%k=9或(7+(4+5+6))%k=9。規律就是棟棟報的數字就是他報的前乙個數字加上一段等差數列的和。
題解:
#include
using namespace std;
const
int maxn=
10005
;typedef
long
long ll;
intmain()
cout<
return0;
}
藍橋杯 數字遊戲
問題描述如下 問題不難,最大的問題是溢位,如果使用long long而直接暴力求借,溢位問題依舊存在。如何解決呢,不難得出第i個人心中的數是1 1 2 3 i 1 所以到下一次棟棟心裡的數為1 1 2 3 4 5 n 其中n為已經有n人次報過數 為了避免溢位,筆者的做法是保留上次棟棟報數的值,假設為...
藍橋杯 數字遊戲
問題 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 9現在如果知道n和最後得到的數字sum,請求出最初序列a i 為1 n的乙個排列。若有多種答案,則輸出字典...
藍橋杯 歷屆試題 數字遊戲
這道題給了乙個很明顯的乙個序列,那麼就是數列可以一次寫為 1 0 1 0 1 1 0 1 2 1 0 1 2 3 1 0 1 2 n 1 這樣就轉化為1加上乙個等差數列,那麼直接按照等差數列求和公式sn a1 an n 2 這樣就很容易求出答案。但是中間用公式的時候會用到i n i n 1 注意i和...