poj3270 && poj 1026(置换问题)

置换群的幂运算总结 最近看了潘振浩的《置换群幂运算的应用与研究》,在这里做一个简单总结,潘大神的世界还是太深了,我只能领悟一二置换群的整数幂运算结论一:一个长度为ll的循环TT,ll是kk的倍数,则是kk个循环的乘积,每个循环分别是循环T中下标i mod k=0,1,2…的元素按顺序的连接。 结论二:一个长度为ll的循环TT,gcd(l,k)=1gcd(l,k)=1,则是一个循环,与循环T不一定相同。 结论三:一个 阅读详情

| 1 2 3 4 5 6 |

| 3 6 5 1 4 2 |

在一个置换下,x1->x2,x2->x3,...,xn->x1,

每一个置换都可以唯一的分解为若干个不交的循环
如上面那个  可以 =>(1,3,5,4)  1的下面是3  ;3的下面是5 一直循环。   (2,6)


一个循环,有两种处理方法:
①用这个循环中最小的元素,依次与相应元素交换,直到该循环内所有元素归位
②用这个循环中最小的元素与所有数中最小的元素交换,然后用所有数中最小的元素依次与相应元素交换,直到该循环内所有元素归位这样(x1,x2,...,xn)就构成了一个循环

思路:(参考北大的群论以及ACM_cxiove)


poj 3270

所以先计算出所有数的和sum,然后再在这个基础上选择是和   循环中最小的元素or所有数中最小的元素  交换。


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 10100
typedef long long ll;
using namespace std;
int a[N];
int p[N];
int flag[N];
int tot;
struct node
{
    int val;
    int cnt;
} q[N];
int n;
void dfs(int u)
{
    for(int i = 1; i <=n ; i++)
    {
        if(a[i] == u && !flag[i])
        {
            flag[i] = 1;
            q[tot].val = min(q[tot].val,a[i]);
            q[tot].cnt++;
            dfs(p[i]);
        }
    }
}

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        int minx = 0x3f3f3f3f;
        memset(flag,0,sizeof(flag));
        int sum = 0;
        for(int i = 1; i <= n; i++)
        {
            scanf("%d",&a[i]);
            p[i] = a[i];
            sum += a[i];
            minx = min(minx,a[i]);
        }
        sort(p+1,p+1+n);
        tot= 0;

        for(int i = 1; i <= n; i++)
        {
            if(flag[i]) continue;
            q[tot].val = a[i];
            q[tot].cnt = 1;
            flag[i] = 1;
            dfs(p[i]);
            tot++;
        }


        for(int i = 0; i < tot; i++)
        {
            sum += min(q[i].val*(q[i].cnt-2),minx*(q[i].cnt+1)+q[i].val);
        }
        printf("%d\n",sum);
    }
    return 0;
}


题意:

对于一个长度为n的字符串,有一个数组表示第i个字符放到那个位置。

输入多个字符串,问这样操作k次后的字符串是什么样子


找出循环的最小周期,求余计算


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#define N 205
typedef long long ll;
using namespace std;
int a[N],p[N];
char ans[N],str[N];
int k,n;

int fin(int i,int k)  //肯能会产生循环,寻找最小周期;并且找出第i个字符会落在的某位
{
    int j,t=i+1;
    i++;
    for(j=1; j<=k; j++)
    {
        i=a[i];
        if(i==t)
        {
            for(i=t,t=0; t<(k%j); t++) //利用最小周期
                i=a[i];
            return i;
        }
    }
    return i;
}

int main()
{
    while(scanf("%d",&n)!=EOF && n)
    {
        for(int i = 1; i <= n; i++)
            scanf("%d",&a[i]);

        while(scanf("%d",&k) && k)
        {
            getchar();
            gets(ans);
            int L = strlen(ans);
            if(L < n)
                for(int i = L; i < n; i++)
                    ans[i] = ' ';
            for(int i = 0; i < n; i++)
            {
                //printf("%d ",fin(i,k) - 1);
                str[fin(i,k) - 1] = ans[i];
            }
            for(int i=n-1;; i--)
                if(str[i]!=' ')
                {
                    str[i+1]='\0';
                    break;
                }
          printf("%s\n",str);
        }
        printf("\n");
    }
    return 0;
}




MicroCap声学仿真介绍(二)-创建声学仿真元件 声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮; 阅读详情

相关推荐

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 462

POJ 3270-Cow Sorting(置换群)

题目地址:POJ 3270 题意:有n头牛,每头牛有一个独一无二的”愤怒值“,要想把他们的愤怒值从小到大排序(交换任意两头牛位置所花费的时间为他们愤怒值的和),求最小的交换时间。 思路: 1.找出初始状态和结束状态(初始状态为题目所给,结束状态为从小到大排列) 2.画出置换群,在里面找循环。例如 初始状态:8 4 5 3 2 7 结束状态:2 3 4 5 7 8 从头开始找8

Rocky0429 1763

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1904

poj3270--Cow Sorting(置换群)

题目链接:点击打开链接 题目大意:给出你n个数,要求把这n个数排列成有序的(由小到大),每次可以交换两个数,花费是这两个数的和,现在求最小的花费 置换群的入门 求出每一个轮换的圈,对于每一个轮换中,只有在自身内交换就能完成有序,而不需要和其它轮换交叉。 一个轮换的最小值temp,轮换中有num个数,轮换的总和是sum,整个序列的最小值min1 让一个轮换花费最少有两种可能 1、轮换自身

随风的专栏 1332

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 419

poj 3270(置换 循环)

经典的题目,主要还是考思维,之前在想的时候只想到了在一个循环中,每次都用最小的来交换,结果忽略了一种情况,还可以选所有数中最小的来交换一个循环。 Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6511   Accepted: 2532 Desc...

weixin_34072159的博客 216

用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程

今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。本文将推...

weixin_39882870的博客 5306

POJ3270 置换群

给你一些没有重复的数,你只能交换其中两个数字,但是你要付出的代价是这两个数字之和。问你如何交换使得这些数字递增且代价最小。置换群的概念:这些数字将会形成几个循环体。对于每个循环体1、循环体内和 + 循环体内最小值 + 所有数内最小值 * (该循环体内数字个数 + 1)2、循环体内和 + 循环体内最小值 * (该循环体内数字个数 - 1)以上两种取最小值即可。//#pragma comment(li

ColorWaterer的专栏 591

九天揽月带你玩转Ardupilot 的EKF2纸老虎(1)

目录 目录 摘要 1.kalman基础知识储备 摘要 本文主要记录自己学习ardupilot的ekf2代码的过程,相信很多人想移植或者学习ekf2,看到眼花缭乱的代码无从下手。九天揽月将带你玩转Ardupilot 的EKF2纸老虎 1.kalman基础知识储备 (1)先来看下最基础也是最重要的线性kalman 总结:不要害怕kalman,只要你可以懂得线性kal...

陌城烟雨 1万+

淘系商品的成长密码:历史与趋势透视

本文分析了淘系商品的发展历程,从早期的市场探索到如今的行业领先地位,深入探讨了技术创新、供应链优化、用户需求洞察等关键因素在淘系商品成功中的作用。通过对平台不断完善商品生态、提升购物体验和服务的过程分析,文章总结了淘系商品在竞争激烈的市场中如何通过创新应对挑战并推动电商行业的进步。未来,随着消费趋势变化和新兴模式的兴起,淘系商品将在更大范围内发挥其市场影响力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

POJ - 3270 Cow Sorting 置换

题目:有一串数字,要将它排列成升序,每次可以交换两个数,交换一次的代价为两数之和,求代价最小是多少。 思路:置换。对于每个循环,要么是用当前循环内最小的数mi去和其他数交换,要么是用全局最小值MIN和mi交换,然后用MIN去和循环内其他的数进行交换,然后MIN再和mi去交换。 假设循环长度为cnt,循环内所有数的和为sum,那么答案就是sum+min((cnt-2)*mi,mi+(cnt+1)

ACVevtor的博客 297

Midscene.js(1):Chrome 插件实战之基于 AI 驱动 WEB UI 自动化测试「喂饭教程」

Midscene.js 是一款开源的AI驱动UI自动化工具,支持自然语言交互、数据提取、断言验证等多种功能。自然语言交互。本文将以 Midscene.js Chrome 插件为例,带你从零上手,体验如何用最简单的方式实现高效、智能的UI自动化测试。

blues_C的博客 4404

c语言最大元素最小元素归位,poj3270 && poj 1026(置换问题)

| 1 2 3 4 5 6 || 3 6 5 1 4 2 |在一个置换下,x1->x2,x2->x3,...,xn->x1,每一个置换都可以唯一的分解为若干个不交的循环如上面那个 可以 =>(1,3,5,4) 1的下面是3 ;3的下面是5 一直循环。 (2,6)一个循环,有两种处理方法:①用这个循环中最小的元素,依次与相应元素交换,直到该循环内所有元素归位②用这个...

weixin_36206388的博客 282

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

菜鸟系列——置换群

菜鸟就要老老实实重新学起: 置换群 简单地说置换群就是按一定规则互相替换的一个集合。简单,主要看例题。 poj3270 给出一列数,求将这列数排成升序的最小花费,这里花费定义为交换两个数的和。 例如给出一排数8 4 5 3 2 7,那么我们最终的状态为2 3 4 5 7 8,这里的轮换有(8 2 7)(4 5 3),这里8应该在第六个位置, 而第6个位置是7,7应该

MyWorld 1875

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

置换群题集

POJ1026 题意:对字符串按照置换操作k次,求最后的结果。 题解 求出每一个位置循环的长度,最后操作时,k对长度取模为k'。只需要变换k'次即可。 代码 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <c...

FlyingJack 954

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

置换群

被ZJOI 2018 DAY2 T1 逼得滚回去学数学了。(⊙o⊙)… 学了一些置换群的理论。 有一些定义: 群:符合结合律,单位元,逆元的东西。 abel群: 符合交换律的群 群的阶:群中集合的元素个数; 生成子群: 拿出一些元素后互相生成所产生的群。 陪集: 拿一个元素出来,左乘或右乘一个子群所产...

954

置换群快速幂 学习小结 #by nobody

本小结会不断更新,转载注明出处:http://blog.youkuaiyun.com/xdu_truth/article/details/8040080 上个月在hdu热身赛中遇到一个数学题(hdu 4259),本来以为是个找规律的题,想了一下午没想出来。 后来看了解答,觉得好神奇的样子。这几天自学了一下置换群才恍然大悟那题是个很基础的置换群的题。 数学真是博大精深啊。。 结论一:一个

XDU_Truth的专栏 1556

几道置换群题目

最近学了置换群,然后就想着写几道 POJ - 1026 Cipher VJ 题意: 题目意思是给一个置换,然后给一些字符串和一个整数k,要求对这些字符串进行k次置换 思路: 非常基础的题,要求置换k次,那么就把置换中的每一个环向右转k−1k - 1k−1次,然后再置换即可。 代码: 这里我写复杂了 #include<cstdio> #include<algorithm> #include<vector> #include<iostream> #include&

qq_36102055的博客 856

POJ训练记录1:置换群

生如夏花之绚烂,死如秋叶之静美。

zyf2000 1219

POJ 1026 Cipher(置换群)

题目链接 题意 :由n个数字组成的密钥,每个数字都不相同,都在1~n之间,有一份长度小于等于n的信息,要求将信息放到密钥下边,一一对应,信息不足n的时候补空格,然后将位置重新排列,将此过程重复k次,求最后的字符串序列,最后的空格不用输出。 思路 :如果按照最原始的求循环结的话会超时,因为k值范围很大。所以要用置换群,把每个的元素的循环求出来,直接对其取余即可。会3270的话,这个题理解起来挺容...

weixin_30301449的博客 91

置换群小结

http://wenku.baidu.com/link?url=uEZvNMcUgm0OlH6v39cTKrgXH31h_RO_YhqhMX3M95XVacbv4vzWI1BvV3aoKAtrczWEdXiB1FagPxXKxRU9d91YbkPExOoFg2dVxDrOTNq 置换在ACM里貌似经常碰到,以前不会,一直瞎搞,做不出,最近学了下,感觉懂了点东西,但是还是很多不会做

Miracle_ma的专栏 7408

置换(群论)

poj3270  使一个序列有序化的最小代价,考虑序列循环内部采用最小数交换,或者用整个序列最小值替换循环内最小值,然后进行循环内最小数交换,最后再把原先循环内交换出去的数交换回来。 具体参考这篇博客:http://www.cnblogs.com/DreamUp/archive/2010/08/17/1801700.html  类似题目求最小交换次数 uva11077 当然此题求方案

GAUSS_CLB 1944

Valera and Swaps (置换群)

给出一排数8 4 5 3 2 7,那么我们最终的状态为2 3 4 5 7 8,这里的轮换有(8 2 7)(4 5 3),这里8应该在第六个位置, 而第6个位置是7,7应该在5这个位置,而第5个位置为2,2应该在1这个位置,这样就到了8所在的位置,我们称这是一个轮换。 首先需要明确的一点是对于每个群,假设有k个数,那么我们需要交换k-1次得到升序。 对于每一个群,我们有两种换发: 1.群里换

u010652938的专栏 946

polya定理应用

TT_last 原创,转载请注明。 polya定理不知道可先看潘震皓的 《置换群快速幂运算研究与探讨》,下面是根据论文所做的一些题目。 poj 2409  很裸的一道polya定理应用题目, 处理的状态有:一个点顺时针旋转 0 ~ n-1 个点 还有就是对称旋转的情况:

TT_last的专栏 854
上一篇: 2015 多校联赛 ——HDU5386(暴力)
下一篇: 2015 多校联赛 ——HDU5389(dp)
Tyuio28
博客等级 码龄11年 12粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值