博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2231 Moo Volume 递推 C语言
阅读量:4598 次
发布时间:2019-06-09

本文共 1359 字,大约阅读时间需要 4 分钟。

题目:

个人认为这是一道水题……先输入N表示有N头牛,接下来的N个数是各个牛所在的位置。如果一头牛对另一头牛Moo,那么Moo数就是1号牛所在位置i与2号牛所在位置j的差值,又因为1号牛Moo过去,所以2号牛也要Moo回来,于是Moo数就变为2倍了。

 

    1号牛要对剩余所有(N-1)头牛都Moo,如果我们将牛按顺序排好,每头牛i只对它身后的(N-i)头牛Moo,意思是,我们只考虑某头牛Moo出去的,而不考虑别的牛对它Moo回来的,那么它也不对在它前面的牛Moo,那么这就是一个简单的数学问题,每头牛i只对身后的(N-i)头牛Moo。因为所有牛还要Moo回去,所以最后结果乘2就可以了。

 

    这就想到可以用循环来实现,对每头牛i,它与它后面(N-i)头牛j的距离(i-j),所有距离求和,就是Moo出去的次数,再乘2,就又加上了Moo回来的次数。这样答案就出来了。要用到二重循环。

 

    当然要注意的还有数据范围,牛的个数在10,000以内,int就可以包括,而牛所在位置在0~1,000,000,000,显然Moo的次数也会很大,所以要用long long int才不会溢出。

 

    这个题我写完之后提交是RE,后来又出现了TLE,微微改了几次,先发现int有问题,改成了long long int,

还是TLE,后来发现数组似乎开小了,扩大了一下,就AC了。

 

 

    这个,我讲不大清楚,不过看了代码就能马上理解我的意思啦

AC code:

1 #include 
2 #include
3 #include
4 5 #define MAX 10000 + 100 6 7 int main () {
8 int n; //n的范围1~10,000 int足够 9 long long int num[MAX]; //数据范围0~1,000,000,000 要用long long int才不会溢出 10 long long int sum = 0; //同上 11 int i, j; 12 scanf ("%d", &n); 13 for (i = 1; i <= n; i++) 14 scanf ("%lld", &num[i]); //储存牛的位置 15 for (i = 1; i < n; i++) 16 for (j = i + 1; j <= n; j++) 17 sum += abs(num[i] - num[j]); //累加每两头牛的位置之差 18 printf ("%lld\n", sum * 2); //因为Moo是相对的,有去有回,所以要*2 19 //system ("pause"); 20 return 0; 21 }

 

    这个方法似乎效率不高,但我也只想到这样做了……欢迎批评指教啊!~谢啦~

转载于:https://www.cnblogs.com/cloehui/archive/2011/07/20/2111384.html

你可能感兴趣的文章
mean 快速开发和现有技术的对比分析
查看>>
Metro Style app :浏览器扩展
查看>>
linux的kernel是怎样工作的(TI_DM36X_ARM系统)(1)
查看>>
[luogu4310] 绝世好题 (递推)
查看>>
[luogu3203 HNOI2010] 弹飞绵羊 (分块)
查看>>
-Dmaven.multiModuleProjectDirectory system propery is not set.
查看>>
Python2 unichr() 函数
查看>>
Python 字典 copy()方法
查看>>
Minimum Path Sum
查看>>
Remove Duplicates from Sorted Array II
查看>>
常量指针和指针常量巧妙记忆方法[转]
查看>>
python-haproxy作业讲解视频总结
查看>>
批处理文件脚本总结
查看>>
快速排序C++代码
查看>>
mui搜索框 搜索点击事件
查看>>
bzoj 5289: [Hnoi2018]排列
查看>>
IE10 招贤纳意问题整理文章-安装卸载、功能设置篇
查看>>
joomla处境堪忧
查看>>
Jquery-AJAX
查看>>
python 在windows环境下 压缩文件
查看>>