进一步优化加号乘法(codechef)代码的方法
在CodeChef上解决这个问题的代码时,我尝试使用二进制搜索来解决它,但我的解决方案给出了一个小错误 我编写了以下代码:进一步优化加号乘法(codechef)代码的方法,c,algorithm,C,Algorithm,在CodeChef上解决这个问题的代码时,我尝试使用二进制搜索来解决它,但我的解决方案给出了一个小错误 我编写了以下代码: #include <stdio.h> int main() { int t; scanf("%d",&t); for(int a=0;a<t;a++) { int n; scanf("%d",&n); int arr[n]; for(int i
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
for(int a=0;a<t;a++)
{
int n;
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
scanf("%d",&arr[i]);
int s=0,j,k,f,m,mm;
(n%2==0)?(mm=n/2+1):(mm=n/2+1);
for(j=0;j<mm;j++)
{
f=n-j-1;
for(k=j+1;k<n-1;k++)
{
m=n-k-1;
if((arr[j]*arr[k])==(arr[j]+arr[k]))
s++;
if((arr[f]*arr[m])==(arr[f]+arr[m]))
s++;
}
if((arr[j]*arr[k])==(arr[j]+arr[k]))
s++;
}
printf("%d\n",s);
}
return 0;
}
#包括
int main()
{
int t;
scanf(“%d”、&t);
对于(inta=0;a,根据您的解决方案,我认为代码的复杂性为O(n^2)
但是,根据给定的约束条件,问题期望我以O(n)时间复杂度来解决它
属性ab=a+b
是特殊的,仅对0
和2
具有独占性
因此,只需找到0和2的对数
它可以通过组合计算
请查看以下代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
LL z = 0; //Zero count
LL t = 0; //One count
while(n--){
int x;
cin>>x;
if(x==0){
z++;
}
if(x==2){
t++;
}
}
cout<<((z)*(z-1LL)/2LL) + ((t)*(t-1LL)/2LL)<<endl;
}
return 0;
}
#包括
使用名称空间std;
typedef long long int LL;
int main(){
int t;
cin>>t;
而(t--){
int n;
cin>>n;
LL z=0;//零计数
LL t=0;//一次计数
而(n--){
int x;
cin>>x;
如果(x==0){
z++;
}
如果(x==2){
t++;
}
}
旁白:int-arr[n]
不是标准的。只有一些编译器接受它。这个问题来自正在进行的比赛。比赛已于16日结束,我的错。我阅读了上面的栏。这个问题已经分析并回答了。请记住在发布前搜索。