求大佬指教 30分

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

希望更丰富的展现?[使用Markdown](https://www.luogu.org/wiki/show?name=%E5%B8%AE%E5%8A%A9%EF%BC%9Amarkdown)
by t162 @ 2019-01-20 17:27:41


# Markdown警告!
by ethan_zhou @ 2019-01-20 17:41:17


你是不是没有特判两个数相等?
by ethan_zhou @ 2019-01-20 17:46:54


如果是你的代码应该改为: ``` #include <iostream> #include <algorithm> using namespace std; int n; int a[200]; int main() { cin>>n; //正整数个数 int cnt=0; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); for(int y=2;y<=n-1;y++){ bool flag=0; for(int i=0;i<n-2;i++) { for(int j=i+1;j<n-1;j++) { if(a[i]+a[j]==a[y]) { cnt++; flag=1; break; } } if(flag)break; } } cout<<cnt; return 0; } ``` 以下我的代码可能效率会更高一些: ``` #include <cstdio> #include <algorithm> const int NR=105,MXN=10005; int n,cnt=0,l[NR];bool h[MXN]; int main() { scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",l+i); h[l[i]]=1; } std::sort(l,l+n); for(int i=2;i<n;i++)//枚举和 for(int j=0;j<i;j++){//枚举小的加数 if((l[i]-l[j])<=l[j])break; if(h[l[i]-l[j]]){ cnt++;break; } } printf("%d",cnt); return 0; } ```
by ethan_zhou @ 2019-01-20 18:16:27


|