首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ACM简略题目 Time Limit Exceeded 求解释

2013-03-14 
ACM简单题目 Time Limit Exceeded 求解释ACM简单题目 Time Limit Exceeded 求解释月老使命Time Limit: 100

ACM简单题目 Time Limit Exceeded 求解释
ACM简单题目 Time Limit Exceeded 求解释
月老使命
Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB
Total Submission: 26   Submission Accepted: 3
Description
cxlove曾经客串过月老(呵呵~~~只不过是给数字配对)。
两个整数拼接成一个新数字之后,如果是3的倍数,则我们定义为幸福配对。
现在有n个数字,月老的任务就是将其配对。
现在请你帮助月老计算出最多能够有多少个幸福配对。
例如:123和456可以拼接成123456,也可以组成456123。

Input
一个整数 T,表示有 T 组测试数据。(1<=T<=40)
每组数据输入格式如下:
对于每一组数据,输入如下:
一个整数n (1<=n<=10000)
接下来一行,n个整数 a1,a2,a3……an (1<=ai<=1000000000)

Output
对于每一组数据,输出一个整数,表示最多配成多少对

Sample Input
Original     Transformed
2
3
1 2 3
4
1 1 4 4

Sample Output
Original     Transformed
1
0

#include<stdio.h>
int main()
{
int T,n,a[10001],i,j,sum;
scanf("%d",&T);
while(T--)
{
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
for(j=2;j<=n;j++)
if((a[i]+a[j])%3==0) sum++;
printf("%d\n",sum);
}
return 0;
}

[解决办法]
两两配对吗? 

超时的话应该是的,因为你的复杂度是二次的,想想有没有不需要遍历2遍的算法
[解决办法]
这题直接硬算且不说时间是二次的问题,很可能拼接出来的树是超过64位的。
采取模数除法是最简单的,因为任何一个数字的每个位的数字和是3的倍数时这个数必定整除3 ,
将原来的输入全部采取模3除法,然后记录结果为0、1、2的个数 ,我就设为a、b、c
最后所有的对数就是a*(a-1)/2 +b*c。
[解决办法]
如果整数的各位数字之和能被3整除,那么此整数能被3整除。

热点排行