orz,期末考试前做题
by OldDriverTree @ 2023-01-05 13:51:12
@[UTAsriel](/user/825518)
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
int t[200010],g[200010],a[110];
int main()
{
int n,ans = 0;
cin >> n;
for (int i = 1;i <= n;i++)
{
cin >> a[i];
g[a[i]] = 1;
}
for (int i = 1;i <= n - 1;i++)
{
for (int j = i + 1;j <= n;j++)
{
t[a[i] + a[j]]++;
}
}
for (int i = 1;i <= 200000;i++)
{
if (t[i] && g[i]) ans++;
}
cout << ans << endl;
return 0;
}
```
by codejiahui @ 2023-01-05 14:05:16
@[guoxiangyu66](/user/681036)
反正是线上考,影响不大。
by UTAsriel @ 2023-01-05 16:32:22
@[codejiahui](/user/512407)
虽然这个代码不是C语言(C++应该不算吧?)的,但思路我明白了,感谢!
by UTAsriel @ 2023-01-05 16:36:49
@[codejiahui](/user/512407)
```C
#include <stdio.h>
#include <string.h>
int sr[101],pd[20001],sj[20001];
int main(void){
int n,sc=0;
scanf("%d\n",&n);
for(int a=1;a<=n;a++){
scanf("%d ",&sr[a]);
sj[sr[a]]=1;
}
for(int b=1;b<=(n-1);b++){
for(int c=(b+1);c<=n;c++){
pd[sr[b]+sr[c]]++;
}
}
for(int d=1;d<=10000;d++){
if((sj[d]+pd[d])==2){//等同于sj[d]&&pd[d]==1
sc++;
}
}
printf("%d",sc);
return 0;
}
```
我用C语言做了一个原理一样的,可为什么还是不行?
by UTAsriel @ 2023-01-05 17:24:23
```cpp
for(int d=1;d<=10000;d++){
if((sj[d]+pd[d])==2){//等同于sj[d]&&pd[d]==1
sc++;
}
}
```
如果sj[d] == 0,pd[d] == 2呢?
把这里改了,或者把上面
```cpp
pd[sr[b]+sr[c]]++;
```
改成:
```
pd[sr[b]+sr[c]]=1;
```
应该都行
by codejiahui @ 2023-01-05 18:17:16
@[UTAsriel](/user/825518)
by codejiahui @ 2023-01-05 18:17:29
@[codejiahui](/user/512407)
感谢!已经A了!
by UTAsriel @ 2023-01-08 13:39:20