可以递归的时候读入,递归到头的时候把总和与当前已经判断完的pos-neg差返回,不能用pair的话可以传个取地址啥的,取地址也不算位运算吧...(不知道这有啥意义)
by linfourxu @ 2021-01-20 06:14:27
@[linfourxu](/user/50477) ~~我寻思递归到头也返回不成$pos-neg$啊,还是要回溯的时候算吧。~~
by pl_er @ 2021-01-20 06:24:08
@[linfourxu](/user/50477) 不可以取地址,就是只能用bool跟int这两个数据类型,不能用pointer。我在想可不可以用互递归来做,但是好像也没想出来
by Isaachsq @ 2021-01-20 06:40:33
@[pl_er](/user/315507) 我也觉得,得到头了才能把最后的均值算出来,但是回溯的时候要怎么算我想了好久没想出来
by Isaachsq @ 2021-01-20 06:42:47
@[pl_er](/user/315507) 就是回溯的时候算,然后返回qwq
by linfourxu @ 2021-01-20 07:05:14
怕是一个不可做问题(雾
by oisdoaiu @ 2021-01-20 08:23:30
需要知道的信息为mean和pos-neg,然而只能返回一个值,无法包含两个信息
by oisdoaiu @ 2021-01-20 08:24:15
而且不能用double的话mean还无法用一个int表示
by oisdoaiu @ 2021-01-20 08:24:55
~~好奇老师怎么解决这个问题~~
by oisdoaiu @ 2021-01-20 08:29:30
@[Isaachsq](/user/357161)
```
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
pair<int,int> dfs(int n,int cur,int sum)
{
if(cur==0)
{
int res=sum/n;
if(res*n==sum) return make_pair(res,0);
else return make_pair(res-1000000000,0);
//res-1000000000 means res<avg<res+1
}
int a=read();
sum+=a;
pair<int,int> avg=dfs(n,cur-1,sum);
if(avg.first>=0)
{
if(a>avg.first) ++avg.second;
else if(a<avg.first) --avg.second;
return avg;
}
else
{
avg.first+=1000000000;
if(a>avg.first) ++avg.second;
else if(a<=avg.first) --avg.second;
avg.first-=1000000000;
return avg;
}
}
signed main()
{
int n=read();
int ans=dfs(n,n,0).second;
if(ans>0) puts("positive");
else if(ans==0) puts("neutral");
else puts("negative");
return 0;
}
```
如果把 ``std::pair<int,int>`` 压成一个 ``int`` 满足要求。
但是很烦……
by dead_X @ 2021-01-20 08:32:32