1. 程式人生 > >【機器人M號】題解

【機器人M號】題解

題目

題目描述

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的餘數。

輸入

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

輸出

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

樣例輸入

3 
2 1 
3 2 
5 1

樣例輸出

8 
6 
75

樣例解釋

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

分析

很容易看出M的獨立數就是與M互質的數,尤拉函式φ(M)指與M互質的數的個數,
如果M為P1^e1*P2^e2*…*Pk^ek(Pi是質因數),尤拉函式公式為φ(M)=(P1-1)P1^(e1-1) (P2-1)P2^(e2-1) … (Pk-1)Pk^(ek-1)

令f[i]指選i個奇質數的獨立數之和,顯然遞推式就是:

f[j]=(f[j]+f[j-1]*(zs[i][1]-1))%10000//zs[i
][1]為第i個質數(即p[i]),zs[i][2]為第i個質數的指數(即e[i])

那麼政客的獨立數之和就是當i%2=0的f[i]的總和,軍人的獨立數之和就是當i%2=1的f[i]的總和。而學者的獨立數之和就是小於M的M的所有的約數的獨立數之和,減去政客和軍人的獨立數之和,再減去1(因為1號機器人與其他所有機器人的知識獨立,它也不是任何機器人的老師。)。小於M的M的所有的約數的獨立數之和顯然為:

d|Mϕ(d)

實際上

d|Mϕ(d)=M(這裡有證明http://blog.csdn.net/chen1352/article/details/50695930)。
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int zs[11000][3],n,m,tot,f[1100];
int mi(int x,int y)
{
    int t=1;
    while(y>0)
    {
        if(y&1) t=t*x%10000;
        x=x*x%10000;
        y>>=1;
    }
    return t;
}
int main()
{
    scanf("%d",&n);
    int i,j,k,l;
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&zs[i][1],&zs[i][2]);
    }
    int ans1=0,ans2=0,ans=0;/*ans2是政客,ans1是軍人,ans是學者*/
    int g;
    if(zs[1][1]==2)
        g=2;
        else g=1;
    f[0]=1;
    for(i=g;i<=n;i++)
        for(j=i-g+1;j>=1;j--)
            f[j]=(f[j]+f[j-1]*(zs[i][1]-1))%10000;
    for(i=n-g+1;i>=1;i--)
    {
        if(i%2)
            ans1=(f[i]+ans1)%10000;
            else ans2=(ans2+f[i])%10000;
    }
    ans=1;
    for(i=1;i<=n;i++)
        ans=(ans*mi(zs[i][1],zs[i][2]))%10000;

    ans=(ans+3000000-ans1-ans2-1)%10000;
    cout<<ans2<<endl<<ans1<<endl<<ans<<endl;
}

相關推薦

機器人M題解

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

胡策篇題解

2個 HA 來源 異或 .com rac 方式 合並 tutorial 和泉紗霧與煙花大會 題目來源: UOJ 192 最強跳蚤 (只改了數據範圍) 官方題解: 在這裏哦~(說的很詳細了 我都沒啥好說的了) 題目大意: 求樹上各邊權乘積是完全平方數的路徑數量. 這種從\(

luogu P4114 Qtree1 題解

\n oid new update left www. esp href int 題目鏈接:https://www.luogu.org/problemnew/show/P4114 1.把邊權轉化到點權:選取連接這條邊的兩個點中較深的一個。 2.查詢點到點之間的邊權時,要從s

python/M/leetcodeCompare Version Numbers

題目 https://leetcode.com/problems/compare-version-numbers/ 注意 就注意一下開始和末尾有0的情況 01 和 1 1.0 和 1 的區別 實現程式碼 class Solution(object):

unity3D 如何提取遊戲資源 (反編譯)+程式碼反編譯P.M.出品

首先感謝 雨鬆MOMO 的一篇帖子 教我們怎麼提取 .ipa 中的遊戲資源。教我們初步的破解unity3d資源的基本方法 附上原帖的連結:http://www.xuanyusong.com/archives/2584 下面我會從頭介紹一下提取的全過程:步驟一:首先從 https://github.com/a

JZOJ 1161.機器人M

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

CSU 1112機器人的指令模擬

Description數軸原點有一個機器人。該機器人將執行一系列指令,你的任務是預測所有指令執行完畢之後它的位置。·LEFT:往左移動一個單位·RIGHT: 往右移動一個單位·SAME AS i: 和第

華容道題解(NOIP2013提高組day2)

分析 這道題很容易想到令f[x][y][x1][y1]表示空白塊在(x,y)、指定棋子在(x1,y1)時的最少步數,讓空白塊和四周的棋子交換,當空白塊要和指定棋子交換時,把指定棋子移動,搞一下BFS就可以了,時間複雜度O(qn^2m^2),可以拿60+。 因

NOI 2002 機器人M 尤拉函式

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

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

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

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號都可

題解 P1420 最長連

行處理 span -s bits pre c++ cpp 整數 然而 本蒟蒻共發兩篇題解都以同樣的理由被拒絕了>_< 所以,在仔細閱讀了其他同學寫的題解後決定認真寫一道簡單一點的題目的題解 我發現好像很多同學都想得太復雜了 這道題n<=10000,明明o(

基礎練習拓撲排序codevs3294 車站分級題解

線上 inpu tom code spa bre 必須 處理 snippets 題目來源:NOIP2013 普及第四題 題目描寫敘述 Description 一條單向的鐵路線上,依次有編號為1, 2, …, n的n個火車站。每一個

實戰編程編寫0中斷處理程序

查看 com col 長度 獲取 pre p s 更改 end 題目:編寫0號中斷處理程序,在除法溢出時,在屏幕中間顯示字符串“hacker by admin!” 之前先補充一個rep movsb的指令知識 movsb和movsw是相反的,

TMD模擬賽上低音 鏈表

枚舉 true size line 以及 point eof print 邊界 這道題一看有兩個出發現點,一枚舉點去找邊界,想了一會就Pass了...,二是枚舉相框,我們最起碼枚舉兩個邊界,然後發現平行邊界更好處理,然而仍然只有30分,這個時候就來到了鏈表的神奇應用,我們枚

原創幹貨本頁內鏈接之"?"開頭,節省一點點代碼編寫時間

後臺 highlight 一個 pan ... div form font -s 假如我們的頁面名稱為“my_page.php”,在該頁裏制作鏈接時,如果是鏈接本頁面,那麽HTML代碼大致是: ... <a href="my_page.php?cid=1">分

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

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

公眾h5牛牛遊戲源碼出售 平臺免費搭建分享教程

遊戲源碼 get 提交 上傳 準備 連接 帳號 阿裏 xshel 2018年最新的h5遊戲,現在免費分享給大家。【公眾號】h5牛牛遊戲源碼出售 平臺免費搭建(Q-2152876294)分享教程鏈接http://diguaym.com/h5 手機H5遊戲是現在的潮流,因為搭建

題解 P1433 吃奶酪

現在 continue == 理解 距離 搜索 宇宙 思想 mes 題解 P1433 【吃奶酪】 首先,我確定我的不是最優解,但最好寫。看到樓上DALAO用記憶化搜索和狀壓DP本蒟蒻感到瑟瑟發抖,這好似是一個簡單的DFS問題,乍一看數據我稍有擔憂,但是洛谷有全宇宙最快的評測