ural 1024 PERMUTATIONS
2015-07-27 14:11
417 查看
这题跟前面的一个codeforces很像,,,,就是一个数一直映射,,,让式子回到原来,,,,,,的周期
先是纯模拟,,错了几回然后TLE:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int t=0;
int a[1001],b[1001],c[1001];
int m;
int fuhe()
{
int i;
for(i=1;i<=m;i++)
{
if(a[i]!=c[i]) return 1;
}
return 0;
}
int main()
{
while(scanf("%d",&m)!=EOF)
{
int i;
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
c[i]=a[i];
}
for(i=1;i<=m;i++)
{
b[i]=a[i];
}
int flag=0;
while(flag==0||fuhe()==1)
{
flag++;
for(i=1;i<=m;i++) a[i]=b[a[i]];
//for(i=1;i<=m;i++) printf("%d ",a[i]);
//puts("");
t++;
}
printf("%d\n",t);
}
return 0;
}
TLE是我最能接受得了,,,,,说明理解对想算法就好了。。。。。。
于是求每个数字的周期的最小公倍数。。。。
第一次还是超时了。。。。。。。。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int t=0;
int a[1001],b[1001],c[1001];
int m;
int zdgys(int a,int b)
{
if(a>b)
{
if(a%b==0) return b;
return zdgys(a%b,b);
}
if(a<=b)
{
if(b%a==0) return a;
return zdgys(b%a,a);
}
}
int main()
{
while(scanf("%d",&m)!=EOF)
{
int i;
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=m;i++)
{
b[i]=a[a[i]];
}
int t;
int ans=1;
for(i=1;i<=m;i++)
{
t=1;
while(b[i]!=a[i])
{
b[i]=a[b[i]];
t++;
}
ans=t*ans/zdgys(t,ans);
//printf("%d**%d\n",t,ans);
}
printf("%d\n",ans);
}
return 0;
}
我心想,,,不能啊
原来是没开longlong。。。。。。。。。。。。。。。。。。。。。。。。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long int a[1001],b[1001],c[1001];
long long int m;
long long int zdgys(long long int a,long long int b)
{
if(a>b)
{
if(a%b==0) return b;
return zdgys(a%b,b);
}
if(a<=b)
{
if(b%a==0) return a;
return zdgys(b%a,a);
}
}
int main()
{
scanf("%lld",&m);
int i;
for(i=1;i<=m;i++)
{
scanf("%lld",&a[i]);
}
for(i=1;i<=m;i++)
{
b[i]=a[a[i]];
}
int t;
long long int ans=1;
for(i=1;i<=m;i++)
{
t=1;
while(b[i]!=a[i])
{
b[i]=a[b[i]];
t++;
}
ans=t*ans/zdgys(t,ans);
//printf("%d**%d\n",t,ans);
}
printf("%lld\n",ans);
return 0;
}
先是纯模拟,,错了几回然后TLE:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int t=0;
int a[1001],b[1001],c[1001];
int m;
int fuhe()
{
int i;
for(i=1;i<=m;i++)
{
if(a[i]!=c[i]) return 1;
}
return 0;
}
int main()
{
while(scanf("%d",&m)!=EOF)
{
int i;
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
c[i]=a[i];
}
for(i=1;i<=m;i++)
{
b[i]=a[i];
}
int flag=0;
while(flag==0||fuhe()==1)
{
flag++;
for(i=1;i<=m;i++) a[i]=b[a[i]];
//for(i=1;i<=m;i++) printf("%d ",a[i]);
//puts("");
t++;
}
printf("%d\n",t);
}
return 0;
}
TLE是我最能接受得了,,,,,说明理解对想算法就好了。。。。。。
于是求每个数字的周期的最小公倍数。。。。
第一次还是超时了。。。。。。。。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int t=0;
int a[1001],b[1001],c[1001];
int m;
int zdgys(int a,int b)
{
if(a>b)
{
if(a%b==0) return b;
return zdgys(a%b,b);
}
if(a<=b)
{
if(b%a==0) return a;
return zdgys(b%a,a);
}
}
int main()
{
while(scanf("%d",&m)!=EOF)
{
int i;
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=m;i++)
{
b[i]=a[a[i]];
}
int t;
int ans=1;
for(i=1;i<=m;i++)
{
t=1;
while(b[i]!=a[i])
{
b[i]=a[b[i]];
t++;
}
ans=t*ans/zdgys(t,ans);
//printf("%d**%d\n",t,ans);
}
printf("%d\n",ans);
}
return 0;
}
我心想,,,不能啊
原来是没开longlong。。。。。。。。。。。。。。。。。。。。。。。。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long int a[1001],b[1001],c[1001];
long long int m;
long long int zdgys(long long int a,long long int b)
{
if(a>b)
{
if(a%b==0) return b;
return zdgys(a%b,b);
}
if(a<=b)
{
if(b%a==0) return a;
return zdgys(b%a,a);
}
}
int main()
{
scanf("%lld",&m);
int i;
for(i=1;i<=m;i++)
{
scanf("%lld",&a[i]);
}
for(i=1;i<=m;i++)
{
b[i]=a[a[i]];
}
int t;
long long int ans=1;
for(i=1;i<=m;i++)
{
t=1;
while(b[i]!=a[i])
{
b[i]=a[b[i]];
t++;
}
ans=t*ans/zdgys(t,ans);
//printf("%d**%d\n",t,ans);
}
printf("%lld\n",ans);
return 0;
}
相关文章推荐
- Android Studio手动导入第三方类库
- 多功能数字时钟
- 中国象棋机器人
- javascript专业八级测试答案整理
- mysql按月,按日分组统计数据
- 手机点击图片时出现边框线的解决方法
- jquery实现动画部分
- 工作3个月后个人对测绘专业的重新反思(重新思考武大测绘学科就业问题和读研问题)
- EALayout 第四节 引用另一个控件的位置属性
- POJ 2566 Bound Found(前缀和排序 + 尺取法)
- DropDownList 获取不了选择的值 这种错误
- 查看文件被哪个进程lock住
- AM335x(TQ335x)学习笔记——触摸屏驱动编写
- svn---安装、启动、关闭
- ${pageContext.request.contextPath}和request.contextPath的区别 分类: jsp el表达式 2013-07-17 15:50 7184人阅读 评论
- [转]RecyclerView初探
- js正则表达式之中文验证(转)
- [C++]类的定义 class
- Linux_多核系统下绑定进程或线程到指定CPU_核执行
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍