2017年7月25日多校一Function

   Function这道题我当时一直很迷,到底怎么来的啊,为什么会这样啊??
   然后看了题解才知道,原来是找循环啊。
   已知f(i)=b[f(a(i)],则
   f(0) = b[f(a[0])] = b[f(2)]
   f[1] = b[f(a[1])] = b[f(0)]
   f[2] = b[f(a[2])] = b[f(1)]
   其实这道题可以转化为求环的问题,有多少种方式可以构成题目要求的环,即b的环可以有多少种方式画成a的环。
   第一个样例我们可以知道 a0->a1->a0,  a2->a2,  b0->b0, b1->b1。
   则和a同构的环有b0->b0->b0, b1->b1->b1, b0->b0, b1->b1四个
   第二个样例我们可以知道a0->a2->a1->a0  b0->b0  b1->b2->b3->b1
   则和a同构的环有b1->b2->b3->b1   b2->b3->b1->b2  b3->b1->b2->b3   b0->b0->b0->b0四个
   然后找出所有环的长度,是a环的因子的就加起来,最后将所有的乘起来(为什么是乘起来??因为组合数学啊(●‘?‘●))
ll ans=1;
   for (int i=0; i<va.size(); i++) {
       ll num=0;
       for (int j=0; j<vb.size(); j++) {
          if (va[i]%vb[j]==0) num+=vb[j];
        }
       ans = ans*num%mod;
   }
 代码:
/*  gyt
       Live up to every day            */
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = 1e5+10;
const ll maxm = 1e7;
const ll mod = 1e9+7;
const int INF = 1<<30;
const db eps = 1e-8;
int a[maxn], b[maxn];
bool visa[maxn], visb[maxn];
vector<ll>va, vb;
int ca=1;
int flag;
void init() {
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    memset(visa, 0, sizeof(visa));
    memset(visb, 0, sizeof(visb));
    va.clear();
    vb.clear();
}
void solve() {
    int n, m;
    while(scanf("%d%d", &n, &m)!=EOF) {
        init();
        for (int i=0; i<n; i++) {
            scanf("%d", &a[i]);
        }
        for (int i=0; i<m; i++) {
            scanf("%d", &b[i]);
        }
        for (int i=0; i<n; i++) {
            if (visa[i])  continue;
            int x=i;  int sum=0;
            while(x!=a[x]) {
                if (visa[x])  break;
                visa[x]=1;
                sum++;
               // cout<<x<<" "<<a[x]<<endl;
                x=a[x];
            }
            //cout<<x<<endl;
            if (x==i) {
               // cout<<"sum:"<<sum<<endl;
                if (sum==0)  va.push_back(1);
                else  va.push_back(sum);
            } else {
                x=i;  int num=0;
                while(x!=a[x]) {
                    if (num>=sum)  break;
                    visa[x]=0;
                    num++;
                    x=a[x];
                }
                visa[i]=1;  va.push_back(1);
            }
        }
        for (int i=0; i<m; i++) {
            if (visb[i])  continue;
            int x=i;  int sum=0;
            while(x!=b[x]) {
                if (visb[x])  break;
                visb[x]=1;
                sum++;
                x=b[x];
            }
            if (x==i) {
                if (sum==0)  vb.push_back(1);
                else  vb.push_back(sum);
            } else {
                x=i;  int num=0;
                while(x!=a[x]) {
                    if (num>=sum)  break;
                    visb[x]=0;
                    num++;
                    x=b[x];
                }
                visb[i]=1;  vb.push_back(1);
            }
        }
        ll ans=1;
        for (int i=0; i<va.size(); i++) {
            ll num=0;
            for (int j=0; j<vb.size(); j++) {
                if (va[i]%vb[j]==0) num+=vb[j];
            }
            ans = ans*num%mod;
        }
        printf("Case #%d: %lld\n", ca++, ans);
    }
}
int main() {
    //freopen("in.txt","r",stdin);
  //  freopen("kingdom.in","r",stdin);
    //freopen("kingdom.out","w",stdout);
    int t=1;
   // scanf("%d", &t);
    while(t--)  solve();
}

 
时间: 2024-10-05 14:16:46

2017年7月25日多校一Function的相关文章

2017年4月25日上午

2017年4月25日上午想提高记忆单词的效率,所以自己想办法把英语单词的多种词意联系起来记忆,所以把之前背的单词再复习一遍.学习了南北桥芯片,为一块电脑主板,以CPU插座为北的话,靠近CPU插座的一个起连接作用的芯片称为"北桥芯片",英文名:North Bridge Chipset.北桥芯片就是主板上离CPU最近的芯片.

【天一家园群】2017年3月25日群猜谜会谜题

[天一家园群]2017年3月25日群猜谜会谜题 1.先生分明是书生(泊人) 白胜/方求斌2.自云出身在西京(称谓二) 道长.安人/余泮浩3.地头藤蔓结黄金(字) 坬/顾为善4.半生贡献尽东流(2字歌名) 江南/吴仁宇5.花前月下,一吻初献(网络词)萌/黄丹锋6.仰望天边乌云散(香港明星) 张达明/陈永亮7.分手之后得晋升(口语) 别提了/邵国荣8.儿时常随东坡游(字) 坳/张胜声9.“里中持羊酒贺两家”(称谓) 双生子/赵首成10.“此花开尽更无花”(英烈) 黄继光/许海魁 11.“对镜贴花黄”

【红雪莲谜缘阁群】2017年3月25日坚强与微笑主擂谜会题

[红雪莲谜缘阁群]2017年3月25日坚强与微笑主擂谜会题 01.老农清晨就起身(常用字)川02.宴终人散正初更(常用字)妹03.务必尽力分高下(常用字)处04.顺川而下到江东(常用字)项05.调解之后释前嫌(常用字)谦06.阵前先要能追逐(常用字)隧07.东邻老头去晋北(常用字)都08.整改工厂能崛起(常用字)岸09.人一高兴人变样(常用字)俭10.来日时光去不还(常用字)过11.外逃二人是重点(常用字)送12.一心牵挂心上人(常用字)态13.干了啥事放不下(常用字)哈14.北方去寻人相认(常

【谜海拾贝群】2017年3月25日群友合擂谜会题

[谜海拾贝群]2017年3月25日群友合擂谜会题 人心3条1.眉月斜钩,星横北斗(13笔字)戥北斗象形丶2.河边有几座桥(字)沉3.一扫码,加个人(11笔字)鸽逗号入谜 巽离3条1.言而无信者,大多吞下前言,尽留后语 (三字谜目) 奢侈品2.马孟起独来犯边 (古生物) 猛犸3.枪归仓,尤未晚,一夕白首,放马西凉 (明人)冯梦龙 蓝色彼岸4条1.勒令全家都出接 穴位三 蕉心 命门人中人迎 2. 人生七十古来稀 四字俗语 男女老少 3. 孤帆一片日边来 袁去华词一句 天际归舟 4. 皆非主力部队 成

【松陵文虎群】2017年3月25日陈昌年(有鸣仓庚)主擂谜会题

[松陵文虎群]2017年3月25日陈昌年(有鸣仓庚)主擂谜会题 试铃题:1.吃喝在先必下台(字)品2.一一来开弓(字)弗正式题:1.闭门推出窗前月(礼貌用语)关照2.兵对兵,将对将(数学名词)等角3.闯江湖(体育项目)冲浪4.从远古走来(学科)历史5.登斯楼也,则有心旷神怡,宠辱皆忘.把酒临风,其喜洋洋者矣(唐诗人)高适6.都是断肠句(古书)楚辞7.放学之后来引见(字)觉8.高空作业(天文名词)天干9.告别蛮柳有身孕(乐器)小腰鼓10.共和国的步伐(单位简称)中行11.艰苦朴素好传统(广告用语)

【太阳群】2017年3月25日晚晴主擂谜会题

[太阳群]2017年3月25日晚晴主擂谜会题 1.旧岁新春堂上庆团聚(食物4字)老鸡母圆2.浊水待沉淀(潮口语)罗助3.出售自制轮胎(潮口头语)卖做尼4.全款买房无赊欠(拼音字)资屋足5.浑身湿透站不稳(潮口头语)扎扎软6.不发言就不拍照(4字俗语)无云无影7.连日下雨心烦闷(成语)落落寡欢8.基层心声(方位字)皆下白9.新年法令(用物)鸡规10.今年家中发大财(3字中药)鸡内金11.华夏不凭貌取人(国名二2+3)中非.以色列12.老师朋友群(通假字)交通教13.半夜独自设圈套(4字俗语)一时一

【谜情文化宫群】2017年3月25日风卷帘主擂谜会题

[谜情文化宫群]2017年3月25日风卷帘主擂谜会题 1.吃了前卒再破士(11笔字)乾2.上不表态下顿言(10笔字)唇3.有错之后终受罚(11笔字)谕4.讲得动情记心间(10笔字)诸5.按捺示情泪水起(8笔字)拔6.冬汛撒网斗无收(7笔字)没7.先前动情把词填(10笔字)调8.阁下远离门,起冷母心牵(14笔)瘙9.凡尘尽化居山中(少笔字)亿10.前卫雄起独支撑(少笔字)勾11.阶下拥抱将分别(7笔字)扼12.拆白人沦阶下囚(7笔字)但13.尘起逍遥水阁前(10笔字)通14.当离川边花落尽(11笔

【东山灯谜】2017年3月25日惠来淳风主擂谜会题

[东山灯谜]2017年3月25日惠来淳风主擂谜会题 1.空门闲修终清寂(蔬菜)青椒 2.回头谋划赚钱事(网络行为)发图 3.花荫月微露,疏落村树间(奥运冠军)邓薇 4.召回得问问行情(股市名词)收盘价 5.请坐下,别挡着(年俗)扫尘 6.言辞不得偏激(宋诗人)陈允平 7.各自行动传口令(民国时期高校校长)吕复 8.总是脚踏两条船(2字古代书信用语二)素心,不一 9.小童远游,辗转如今终归家(2字古代书信用语二)音尘.吟安 10.谢春芳歌声真不错(卷帘格,2字古代书信用语二)好音.朵云 11.“公

2016年9月25日四校联考

·前言:啊f**k今天早上体检,但是并不影响做题2333因为题目真的好 NOIP 啊 啊对了附中评测姬好坑啊正解强行T 23333 第一题<萝卜种子> 简要题意:小姑娘看了看狐狸的萝卜田,发现田里最多只能生长7个萝卜(多余的种子不会发芽),且4种萝卜发芽的概率是完全相同的.它们的效果分别是: 普通萝卜:生产2kg兔粮 超能萝卜:生产2kg兔粮,每种植一个其他萝卜额外产生1kg兔粮 固氮萝卜:不能用于生产兔粮,但能使每个普通萝卜和超能萝卜生产的兔粮+1kg 金坷垃萝卜:不能用于生产兔粮,但能使每