1. 程式人生 > >JZOJ 1161.機器人M號

JZOJ 1161.機器人M號

Description

3030年,Macsy正在火星部署一批機器人。 第1秒,他把機器人1號運到了火星,機器人1號可以製造其他的機器人。 第2秒,機器人1號造出了第一個機器人——機器人2號。 第3秒,機器人1號造出了另一個機器人——機器人3號。 之後每一秒,機器人1號都可以造出一個新的機器人。第m秒造出的機器人編號為m。我們可以稱它為機器人m號,或者m號機器人。 機器人造出來後,馬上開始工作。m號機器人,每m秒會休息一次。比如3號機器人,會在第6,9,12,……秒休息,而其它時間都在工作。 機器人休息時,它的記憶將會被移植到當時出生的機器人的腦中。比如6號機器人出生時,2,3號機器人正在休息,因此,6號機器人會收到第2,3號機器人的記憶副本。我們稱第2,3號機器人是6號機器人的老師。 如果兩個機器人沒有師徒關係,且沒有共同的老師,則稱這兩個機器人的知識是互相獨立的。注意:1號機器人與其他所有機器人的知識獨立(因為只有1號才會造機器人),它也不是任何機器人的老師。 一個機器人的獨立數,是指所有編號比它小且與它知識互相獨立的機器人的個數。比如1號機器人的獨立數為0,2號機器人的獨立數為1(1號機器人與它知識互相獨立),6號機器人的獨立數為2(1,5號機器人與它知識互相獨立,2,3號機器人都是它的老師,而4號機器人與它有共同的老師——2號機器人)。 新造出來的機器人有3種不同的職業。對於編號為m的機器人,如果能把m分解成偶數個不同奇素數的積,則它是政客,例如編號15;否則,如果m本身就是奇素數或者能把m分解成奇數個不同奇素數的積,則它是軍人,例如編號 3, 編號165。其它編號的機器人都是學者,例如編號2, 編號6, 編號9。 第m秒誕生的機器人m號,想知道它和它的老師中,所有政客的獨立數之和,所有軍人的獨立數之和,以及所有學者的獨立數之和。可機器人m號忙於工作沒時間計算,你能夠幫助它嗎? 為了方便你的計算,Macsy已經幫你做了m的素因子分解。為了輸出方便,只要求輸出總和除以10000的餘數。

Input

輸入檔案的第一行是一個正整數k(1<=k<=1000),k是m的不同的素因子個數。 以下k行,每行兩個整數,pi, ei,表示m的第i個素因子和它的指數(i = 1, 2, …, k)。p1, p2, …, pk是不同的素數。所有素因子按照從小到大排列,即p1

Output

輸出檔案包括三行。 第一行是機器人m號和它的老師中,所有政客的獨立數之和除以10000的餘數。 第二行是機器人m號和它的老師中,所有軍人的獨立數之和除以10000的餘數。 第三行是機器人m號和它的老師中,所有學者的獨立數之和除以10000的餘數。

Data Constraint

樣例解釋: m=2*3^2*5=90。90號機器人有10個老師,加上它自己共11個。其中政客只有15號;軍人有3號和5號;學者有8個,它們的編號分別是:2,6,9,10,18,30,45,90。

Solution

我自認為這是水法。遇到質數2直接不管,其他的繼續DP。
由於政客和軍人分解質因數後的質因子均不相同,如果老師的任意質因子的指數>1,那麼它們統統都是學者。因此我們只用列舉選哪些質數。
設F[0,i]表示當前從P[1]~P[i]中選出偶數個質數的乘積的獨立值之和
F[1,i]………………………………………….奇……………………………………………………. (看你們能夠理解吧,我有一點偷懶,呵呵)
顯然當前狀態是從上一個狀態轉移過來的,所以F[0,i]=F[0,i-1]+(^@&#^&)
我們設從P[1]~P[i-1]中選出奇數個質數的乘積為N,所以F[1,i-1]=Σφ(n)
那麼現在選擇的質數的乘積就為N*P[i].
我們知道φ(n* P[i])= φ(n) * φ(P[i]),φ(P[i])=P[i]-1,且N和P[i]互質,所以F[0,i]=F[0,i-1]+Σφ(n) *Σφ(P[i])=F[0,i-1]+(P[i]-1) *F[1,i-1]
關於奇數個質因子這一方面,還有這樣一種可能:我可能P[1]~P[i-1]中的素數一個都不選,卻偏偏選P[i]。所以F[1,i]=F[1,i-1]+(P[i]-1) *(F[0,i-1]+1)。
答案分別是F[0,k],F[1,k],M-F[0,k]-F[1,k]-1(記得取模)

Code

const mo=10000;
var f:array[0..1,0..1001] of longint;
    ii,i,j,k,l,n,m,t,x,y:longint;
    ans:int64;
    p,e:array[0..1001] of longint;
function ksm(x,y:int64):int64;
var s,t:int64;
begin
    s:=1;
    t:=x;
    while y>0 do
    begin
        if odd(y) then s:=(s*(t mod mo))mod mo;
        t:=(t*t)mod mo;
        y:=y div 2;
    end;
    exit(s mod mo);
end;
begin
    readln(k);
    ans:=1;
    for i:=1 to k do
    begin
        readln(x,y);
        if x<>2 then
        begin
            inc(ii);
            p[ii]:=x;
            e[ii]:=y;
        end;
        ans:=(ans*ksm(x,y))mod mo;
    end;
    for i:=1 to ii do
    begin
        f[0,i]:=((f[1,i-1]*(p[i]-1))mod mo+f[0,i-1])mod mo;
        f[1,i]:=((((1+f[0,i-1])mod mo)*(p[i]-1)mod mo)+f[1,i-1])mod mo;
    end;
    writeln(f[0,ii]);
    writeln(f[1,ii]);
    writeln((ans-f[0,ii]-f[1,ii]-1+100000)mod mo);
end.

當然,P和E我們可以不用陣列存,我們可以線上做(這樣可以省一點空間),像這樣:

const mo=10000;
var f:array[0..1,0..1001] of longint;
    ii,i,j,k,l,n,m,t,x,y:longint;
    ans:int64;
function ksm(x,y:int64):int64;
var s,t:int64;
begin
    s:=1;
    t:=x;
    while y>0 do
    begin
        if odd(y) then s:=(s*(t mod mo))mod mo;
        t:=(t*t)mod mo;
        y:=y div 2;
    end;
    exit(s mod mo);
end;
begin
    readln(k);
    ans:=1;
    for i:=1 to k do
    begin
        readln(x,y);
        ans:=(ans*ksm(x,y))mod mo;
        if x<>2 then
        begin
            f[0,i]:=((f[1,i-1]*(x-1))mod mo+f[0,i-1])mod mo;
            f[1,i]:=((((1+f[0,i-1])mod mo)*(x-1)mod mo)+f[1,i-1])mod mo;
        end;
    end;
    writeln(f[0,k]);
    writeln(f[1,k]);
    writeln((ans-f[0,k]-f[1,k]-1+100000)mod mo);
end.

——2016.2.18 By HuangJingyuan

相關推薦

JZOJ 1161.機器人M

Description 3030年,Macsy正在火星部署一批機器人。 第1秒,他把機器人1號運到了火星,機器人1號可以製造其他的機器人。 第2秒,機器人1號造出了第一個機器人——機器人2號。 第3秒,機器人1號造出了另一個機器人——機器人3號。 之後每一秒,

Jzoj P1161 機器人M___尤拉函式+快速冪+dp

題目大意: 1<=1<=素因子個數<=1000<=1000 22<=素因子<10,00010,000, 11<=指數<=1,000,0001,00

機器人M】題解

題目 題目描述 3030年,Macsy正在火星部署一批機器人。 第1秒,他把機器人1號運到了火星,機器人1號可以製造其他的機器人。 第2秒,機器人1號造出了第一個機器人——機器人2號。 第3秒,機器人1號造出了另一個機器人——機器人3號。 之後每一秒,機

NOI 2002 機器人M 尤拉函式

NKOJ3804 機器人 M 號 問題描述 3030 年,Macsy正在火星部署一批機器人。 第 1 秒,他把機器人 1 號運到了火星,機器人 1 號可以製造其他的機器人。 第 2 秒,機器人 1 號造出了第一個機器人——機器人 2 號。

NKOJ 3804 機器人M(遞推+尤拉函式)

P3804機器人 M 號 問題描述 3030 年,Macsy正在火星部署一批機器人。 第 1 秒,他把機器人 1 號運到了火星,機器人 1 號可以製造其他的機器人。 第 2 秒,機器人 1 號造出了第一個機器人——機器人 2 號。 第

[數論][尤拉函式]機器人M

題目描述 3030年,Macsy正在火星部署一批機器人。 第1秒,他把機器人1號運到了火星,機器人1號可以製造其他的機器人。 第2秒,機器人1號造出了第一個機器人——機器人2號。 第3秒,機器人1號造出了另一個機器人——機器人3號。 之後每一秒,機器人1號都可

JZYZOJ1378 [noi2002]M機器人 歐拉函數

none lap ont get 快速冪 aps class targe const http://172.20.6.3/Problem_Show.asp?id=1378日常懶得看題目怪不得語文差,要好好讀題目了,歐拉函數大概是數論裏最友好的了,不用解方程不用轉換過來轉換過

用python配合微信API接口將微信個人變為聊天機器人

repl ltr 出現問題 微信 request exce ret 鏈接 content 操作系統:Ubuntu16.04   首先我們先安裝itchat: 這裏我之前安裝過了,先在又安裝了一邊 使用 python3 -c "import itchat" 檢查是否安裝成功

9月3日成功舉辦水下智能機器人之153xx8881xx9994

基本 沈陽 開發 試驗 裝備 識別 大學 地球 科學研究 “地球表面70%都是海洋,但海洋環境非常惡劣,人類的認知手段極其有限。比如‘向海洋要資源’,其實我們的能源開采主要在300米深度以上。想要往下潛,手段嚴重不足。”9月3日舉辦的人工智能與水下機器人高峰論壇上,×××沈

微信公共(企業)開發框架-gochat的從零開始教程(三): 智慧機器人模版

感恩節來啦,把自己這個開源框架的挖的坑填一下好了~     之前在第一章的時候就給大家展示過我自己寫的一個智慧聊天機器人,同時具有菜譜查詢、智慧翻譯之類的功能,在這裡我把這個機器人的程式碼開源啦:gochat機器人      這樣大家就可

2的n次冪,判斷一個數是否能寫成m個2相乘,LeetCode 231問題 給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。

2的n次冪,判斷一個數是否能寫成m個2相乘,LeetCode 231號問題 給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。 示例 1: 輸入: 1 輸出: true 解釋: 20 = 1 示例 2: 輸入: 16 輸出: true 解釋: 24 = 16 示例 3:

賓士介紹“56工廠”:引入機器人、5G等高科技元素

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

公眾"雷人"回覆,真的是機器人自動回覆嗎?

網上頻繁爆出有關政府公眾號出現“雷人”回覆,服務方事後解釋為機器人自動回覆,是政府部門找的藉口還是確有其事呢?     關於官方的致歉,網友是不認同的,有的認為是在推卸責任,有的認為,自動回覆根本沒有那麼智慧。     那麼

公眾"雷人"回覆,真的是機器人自動回覆嗎?

網上頻繁爆出有關政府公眾號出現“雷人”回覆,服務方事後解釋為機器人自動回覆,是政府部門找的藉口還是確有其事呢? 關於官方的致歉,網友是不認同的,有的認為是在推卸責任,有的認為,自動回覆根本沒有那麼智慧。 那麼微信公眾號自動究竟有沒有這麼智慧?答案是

微信公眾接入圖鈴機器人

大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油,這個公眾號已經接入圖靈 ​   1.首先你得有一個微信公眾號可以在這裡申請 https://mp.weixin.qq.com/ 2.申請一個圖鈴機器人 http://www.tuling123.com/

【轉載】使用圖靈機器人介面開發微信公眾聊天功能、設定自定義選單及申請測試賬號

<?php header("Content-type: text/html; charset=utf-8"); //以下為固定用法,實現和微信的對接、驗證 define("TOKEN", "callTuling"); $wechatObj

2019年藍橋杯練習3-樓m和n之間的最短移動距離

2019年藍橋杯練習3-樓號m和n之間的最短移動距離 [問題描述]  X星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3...  當排滿一行時,從下一行相鄰的樓往反方向排號。  比如:當小區排號寬度為6時,開始情形如下: &

有n個人圍成一圈,順序排,從第一個開始報數(從1到m報數),凡報到m的人退出圈子,問最後最後留下的是原來第幾的那位

//題目:有n個人圍成一圈,順序排號,從第一個開始報數(從1到3報數),凡報到3的人退出圈子,問最後最後留下的是原來第幾號的那位. //提示:用陣列完成 #include <stdio.h> #define N 100 int fun (int n, int m

flask+新浪sae+圖靈機器人實現超簡單微信公眾智慧回覆功能

人工智慧很火,但是智慧演算法對於大多數人來說門檻兒還是挺高的對於我們這種喜歡折騰的碼農來說,就算不會演算法也要又一顆想折騰的心我們不會演算法,可以基於已經成熟的演算法成果來做一些好玩兒的東西本文介紹下微信公眾號接入圖靈機器人實現智慧回覆功能申請微信公眾號;申請新浪SAE,初次

機器人位於m x n網格的左上角(在下圖中標記為“開始”) 機器人只能隨時向下或向右移動。

本題源自leetcode  62 思路:動態規劃  1 只能向下或者向右走。所以當在i=0 或者 j = 0時  等於1 2 dp[i] [j] = dp[i-1][j] + dp[i][j-1]; 程式碼: int uniquePaths(int m, int n) {