首先我得到输入:
T \\ no of arrays
n \\ size of array
a[i] \\ elements of array
然后我给出了a[i] = a[j]
和i!=j
的索引的输出。
例如:
输入:
2 \\\ no arrays
3 \\ \ size of array 1
1 2 3 \\\ elements of array 1
3 \\\ size of array 2
1 1 2
输出:
0 \\\ as there is no same element
2 \\\ for (0,1) and (1,0) gets has same element "1"
约束:
1 ≤ T ≤ 10
1 ≤ n ≤ 100000
1 ≤ a[i] ≤ 1000000
这是我的代码:
int main() {
int t,T,n,i,j,count;
scanf("%d",&T);
for(t=0;t<T;t++){
scanf("%d",&n);
int a[n];
count =0;
int c[1000000] = { 0 };
for(i=0;i<n;i++){
scanf("%d",&a[i]);
c[a[i]-1]++ ;
}
for(i=0;i<1000000;i++){
if(c[i]>1)
count+= c[i]*(c[i]-1);
}
printf("%d\n",count);
}
return 0;
}
此代码不满足此testcase。
答案 0 :(得分:0)
这是正确的代码
#include<stdio.h>
#include<stdlib.h>
int main() {
int t,T,n,i,j;
long long int count,k;
scanf("%d",&T);
int *c = calloc(1000000,sizeof(int));
for(t=0;t<T;t++){
scanf("%d",&n);
int temp;
count =0;
for(i=0;i<n;i++){
scanf("%d",&temp);
c[temp-1]++ ;
}
for(i=0;i<1000000;i++){
if(c[i]>1){
k = c[i];
count+= k*(k-1);
}
c[i] = 0;
}
printf("%lld\n",count);
}
return 0;
}
变更:
calloc
将数组初始化为零(不知道为什么,但是你的
数组初始化的方法给出了分段错误)n
的限制为100000
因此输出可能高达n^2
,即10000000000
超出int
范围,因此使用{ {1}} long long int
变量。