自己试了几个例子是对的,但是只有40分,求助求助

P2141 [NOIP2014 普及组] 珠心算测验

超时了吧。
by a2lyaXNhbWUgbWFyaXNh @ 2022-10-16 20:29:22


@[Hua_er](/user/823061) 试试看这个 Hack。你的输出是 4。 ```cpp input 5 1 2 2 3 5 output 2 ```
by RP_INT_MAX @ 2022-10-16 20:35:50


@[S__B](/user/661595) 没有超,别乱讲。
by RP_INT_MAX @ 2022-10-16 20:36:14


@[S__B](/user/661595) 没有超时哎
by Arrosw @ 2022-10-16 20:36:38


@[RP_INT_MAX](/user/566289) 好,我看一下,我理解错了,以为集合里没有重复的元素
by Arrosw @ 2022-10-16 20:38:25


@[RP_INT_MAX](/user/566289) o~~我以为O(n)才能过~~
by a2lyaXNhbWUgbWFyaXNh @ 2022-10-16 20:47:17


@[S__B](/user/661595) 审题问题,你也不看看数据范围。
by RP_INT_MAX @ 2022-10-16 20:54:33


@[RP_INT_MAX](/user/566289) 我把排序修改了,数组中重复的数只留下一个,大佬你给的这个例子我也过了,但是还是40分55555 ```c #include <stdio.h> int num[110] = {0}; int sort(int num[],int len); int main() { int n,cnt = 0; scanf("%d",&n); for ( int i = 0; i < n; i++) scanf("%d",&num[i]); n = sort(num,n); for( int i = 0; i < n-2; i++) { for ( int j = i+1; j < n-1; j++) { int k = j+1; if ( num[i]+num[j] == num[k]) cnt++; else if (num[i]+num[j] > num[k]) { for (k++; k < n;k++) { if ( num[i]+num[j] == num[k]) {cnt++;break;} else if (num[i]+num[j] < num[k]) break; } } } } printf("%d\n",cnt); return 0; } int sort(int num[],int len) { for ( int i = 0; i < len ;i++) { for ( int j = 0; j < len-1 ; j++) { if (num[j]>num[j+1]) { int t = num[j]; num[j] = num[j+1]; num[j+1] = t; } else if ( num[j] == num[j+1]) { int t = num[len-1]; num[len-1] = num[j]; num[j] = t; len--; } } } return len; } ```
by Arrosw @ 2022-10-16 21:03:50


|