【NOIP2005普及組T4】迴圈-高精度
測試地址:迴圈
做法:兩年了!!兩年來,我數次挑戰,屢敗屢戰,屢戰屢敗,終於在今天,終於把這題AC了!
好吧迴歸主題。我們設L(k)為尾k位的迴圈節長度,不難發現L(k)=mL(k-1),其中1≤m≤10,不難發現m為n^L(k-1),n^(2L(k-1)),...中第k位的迴圈節長度。因此,我們只需從小到大列舉位數now,然後在n^L(now-1),n^(2L(now-1)),...中找第now位的迴圈節長度,因為迴圈節長度≤10,所以如果列舉超過10次仍然沒有出現迴圈,則表明無解,否則,最後的結果就是各位的m的乘積。
(其實明白了也並不怎麼難嘛...)
以下是本人程式碼:
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> struct hp {int s[210];} n,a,b,ans; char N[110]; int k,now,tmp; void mult1(hp a,hp b,hp &c,int d) { hp s; memset(s.s,0,sizeof(s.s)); for(int i=1;i<=d;i++) for(int j=1;j<=d;j++) s.s[i+j-1]+=a.s[i]*b.s[j]; for(int i=1;i<=d+1;i++) if (s.s[i]>=10) { s.s[i+1]+=s.s[i]/10; s.s[i]%=10; } c=s; } void mult2(hp a,int b,hp &c) { hp s; memset(s.s,0,sizeof(s.s)); for(int i=1;i<=200;i++) s.s[i]+=a.s[i]*b; for(int i=1;i<=200;i++) if (s.s[i]>=10) { s.s[i+1]+=s.s[i]/10; s.s[i]%=10; } c=s; } int main() { scanf("%s%d",N,&k); for(int i=strlen(N)-1,j=1;i>=0;i--,j++) n.s[j]=N[i]-'0'; ans.s[1]=1; a=n; for(now=1;now<=k;now++) { b=n; tmp=b.s[now]; int len=0; do { mult1(a,b,b,k); len++; }while(len<10&&b.s[now]!=tmp); if (b.s[now]!=tmp) {printf("-1");return 0;} b=a; for(int i=1;i<=len-1;i++) mult1(a,b,a,k); mult2(ans,len,ans); } int out; for(out=200;ans.s[out]==0;out--); for(;out>=1;out--) printf("%d",ans.s[out]); return 0; }
相關推薦
【NOIP2005普及組T4】迴圈-高精度
測試地址:迴圈 做法:兩年了!!兩年來,我數次挑戰,屢敗屢戰,屢戰屢敗,終於在今天,終於把這題AC了! 好吧迴歸主題。我們設L(k)為尾k位的迴圈節長度,不難發現L(k)=mL(k-1),其中1≤m≤
【NOIP2015普及組T4】推銷員-優先佇列
測試地址:推銷員 做法:先來分析一下題目。從題目中的樣例,我們可以得到一個猜想:後面的決策一定包含前面的決策。這個結論是可以證明的,證明過程這裡就不贅述了。因此,我們只需要分階段一步步在決策中新增住戶
【NOIP2011普及組T4】表示式的值-模擬+棧
測試地址:表示式的值 做法:一般求表示式值的問題都用棧來解決,而這一題棧中的每一個元素要存兩個數,可以用pair來儲存,first表示一段中結果為0的情況數,second表示一段中結果為1的情況數。設
【NOIP2013普及組P2】表示式求值(NKOJ2500)題解
【NOIP2013普及組P2】表示式求值 Time Limit:10000MS Memory Limit:128000K Total Submit:37 Accepted:19 Case Time
2105. 【NOIP2016普及組複賽】魔法陣
題目描述 題目分析 這一道題就是一個字首和與字尾和的問題。 如果我們已經確定了A物品和B物品,我們該怎樣知道組成ABCD四個物品的方案數呢? 我們只要求另外兩個CD點對的方案數就行了。 我們假設sum[i]為從第i個點到第n個點的CD點對方案數,那
NOIP2005普及組第4題 迴圈(高精度)
題目描述樂樂是一個聰明而又勤奮好學的孩子。他總喜歡探求事物的規律。一天,他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,2,4,8,6……我們說2的正整數次冪最後一位的迴圈長度是4(實際上4的倍數都可以說是迴圈長度,但我們只
【codevs 5126】[NOIP2015 普及組T4]推銷員(貪心)
5126 推銷員 NOIP2015 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description 阿明是一名推銷員,他奉命到螺絲街推銷他
【NOIP2017普及組】賽後心得
ora 特殊 簡單 text 很多 調試 就是 str 格子 我覺得可能今生再也見不到這麽簡單的題目了……甚至有種能AK的錯覺(不 然而考場上腦殼疼了,只剩下310~330。 T4告訴我以後遇到不會的東西一定要早點學…… 題目分析 T1 分數 這次連模擬都不用了,幹脆叫你輸
[jzoj]2018.07.12【NOIP普及組】模擬賽D組:解題報告
1.權勢二進位制 題目: 一個十進位制整數被叫做權勢二進位制,當他的十進位制表示的時候只由0或1組成。例如0,1,101,110011都是權勢二進位制而2,12,900不是。 當給定一個n的時候,計算一下最少要多少個權勢二進位制相加才能得到n。 輸入: k組測試資料。 輸出:
[jzoj]2018.07.15【NOIP普及組】模擬賽D組:解題報告
目錄: 1.馬農 2.馬語翻譯 3.馬球比賽 4.棋盤遊戲 1.馬農 題目描述: 在觀看完戰馬檢閱之後,來自大草原的兩兄弟決心成為超級“馬農”,專門飼養戰馬。 兄弟兩回到草原,將可以養馬的區域,分為 N*N 的單位面積的正方形, 並實地進行考察,歸納出了每
【Paths on a Grid】【POJ - 1942 】(高精度組合數)
題目: Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastered ye
【NOIP2018普及組】對稱二叉樹
@對稱二叉樹@ @題目描述@ @題解@ @程式碼@ @[email protected] @題目描述@ 一棵有點權的有根樹如果滿足以下條件,則被軒軒稱為對稱二叉樹: 二叉樹;
【NOIP2018普及組】擺渡車
@擺渡車@ @題目描述@ @絕對不可能是正解的題解@ @程式碼 - [email protected] @看起來比較像正解的題解@ @程式碼 - [email protected] @[email
【NOIP2016普及組】魔法陣的解析——一些神奇的列舉優化
題目大意:給定一個序列,要求求出滿足,且的a,b,c,d的數量. 首先這道題可以直接用一個桶,先把所有數塞進這個桶裡. 然後我們可以開始列舉答案. 但我們發現,所以我們可以省去以為的列舉,做到列舉,實測在洛谷上能拿到85分. 到這一步優化的程式碼如下: #inc
【NOIP2017普及組正式賽】跳房子
這一題很有它的價值,我都要認真思考一番才能夠想到方法。 先講一下題目大意 題目描述 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下: 在地面上確定一個起點,然後在起點右側畫 n 個格子,這些格子都在同一條
【NOIP2017普及組正式賽】棋盤
此題依舊簡單,用一個深搜+記憶化就可以AC了! var way:array[1..4,1..2] of longint=((1,0),(0,1),(-1,0),(0,-1)); a,zx:array[0..101,0..101] of longin
【NOIP2017普及組正式賽】 圖書管理員
這一題有很多人都搞不懂意思。但是,只要是認真看了題的人,就不會有什麼錯了! 這一題直接用暴力是可以過的,不需要wjq講的什麼字典樹(不過空閒者可“自殘”一下) var ycl:array[1..8] of longint=(10,100,1000,10000,10000
2018.10.06【NOIP普及組】模擬賽C組
T1 YY 題目描述 最近小h接到命令,要再出一份題目,於是小h馬上陷入了沉思之中,想到了yy曾經出過的一道題目:給出一個超大正整數S,S的位數小於500000,然後找出一個數 n, 使得n