zoj 2795 Ambiguous permutations(水~)

依旧水水~

 

有个问题,看提交榜,运行占用内存都好大,或者运行时间好长,纠结,我AC后就一直在想办法怎么减少运行时间,结果还是那样,150ms左右。为啥捏??谁给个比较运行时间短的方法呗~

 

题目比较纠结,本来看答案就判断题目了,WA了,又在这上面吃一次亏,郁闷。好好看题吧。看懂很简单,不多说了。

 

最后是比较两个数组是否相等。开始傻了吧唧滴用strcmp,不让用,后来找到了memcmp,学习了一下;

 

这俩函数都是比较内存区域buf1和buf2的前count个字节。

 

      当buf1<buf2时,返回值<0

  当buf1=buf2时,返回值=0

  当buf1>buf2时,返回值>0

 

不同的是 memicmp不区分大小写字母。

 

int memcmp(void *buf1, void *buf2, unsigned int count);

 

 int memicmp(void *buf1, void *buf2, unsigned int count);

 

这样比较的话,得需要把两个数组初始化(因为数组开得大,用sizeof(N))再加入值,要不不知道里面是什么东西,比较的结果就不同了。。。可能就是这个初始化费了点时间,这个方法还没笨方法快。。。郁闷。

 

如果知道有多少个字节也可以,这个n怎么算呢??就是12345678910111213。。。n,这个玩意。。也挺麻烦的。

 

额。有MM叫偶出去一起买东西捏~宅几天了,终于要出门咧。。。

 

换衣服,梳头去。。。

 

这个是普通做法,笨方法。。。一个一个比较,不同了就跳出去。。

 

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int n,num[100001],pos[100001],i,y=1; while(scanf("%d",&n)!=EOF && n ) { y = 1; for(i=1; i<=n; i++) { scanf("%d",&num[i]); pos[num[i]] = i; } for(i=1; i<=n; i++) { if(pos[i] != num[i]) { y = 0; break; } } y ? printf("ambiguous/n") : printf("not ambiguous/n"); } system("pause"); return 0; }

 

 

函数比较

 

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int n,num[100001],pos[100001],i; while(scanf("%d",&n)!=EOF && n ) { memset(num,0,sizeof(num));//初始化 memset(pos,0,sizeof(num)); for(i=1; i<=n; i++) { scanf("%d",&num[i]); pos[num[i]] = i; } memcmp(num,pos,sizeof(num)) == 0 ? printf("ambiguous/n") : printf("not ambiguous/n"); } system("pause"); return 0; }

你可能感兴趣的:(System)