布置作业的老师就是傻逼。
by dead_X @ 2021-01-20 08:34:17
@[oisdoaiu](/user/56825) 这个题难度应该比较大,是作业的附加题,到时候过几天有答案了我在看看吧,哎,估计这分我是拿不到了
by Isaachsq @ 2021-01-20 09:07:36
@[dead_X](/user/111055) 感谢感谢!我再思考思考
by Isaachsq @ 2021-01-20 09:08:17
@[dead_X](/user/111055) 老师没说数据范围(~~默认所有数据<100~~),把int前五位和后五位分别当成两个short用(逃
by daiarineko @ 2021-01-22 22:03:43
@[qidirj](/user/371468) 准确地说应该是前 $16$ 位(二进制)
by dead_X @ 2021-01-22 22:07:11
@[dead_X](/user/111055) ~~只是皮一下~~,正常来说老师不会把数据放这么宽的,应该有解
by daiarineko @ 2021-01-22 22:08:18
```cpp
#include <cstdio>
#include <iostream>
using namespace std;
int f(int sum,int layer,int maxlayer){//返回值后五位是总和,后五位以外的是pos-neg
int ml=maxlayer;
if(maxlayer<0)cin>>ml;//数据个数
int n;
cin>>n;
if(layer==maxlayer)return (n*ml<(sum+n)?-100000:100000)+sum+n+10000000;//避免出现pos-neg过小出现负数
int r=f(sum+n,layer+1,ml);
cout<<layer<<" "<<maxlayer<<" "<<n<<" "<<r<<endl;
int rr=r%100000;
r/=100000;//取两部分,r=pos-neg,rr=所有数总和
r-=100;//注意一定要先除再减,否则亲测会WA
if(n*ml<rr/*小于平均,这里采用除变乘的方式避免小数*/){
return rr+(r-1)*100000+10000000;
}else if(n*ml>rr){
return rr+(r+1)*100000+10000000;
}else{/*题面漏洞,没有考虑某元素等于平均数的情况,自行改变这个分支*/
return rr+r*100000+10000000;
}
return -1;
}
int main(){
int r=f(0,1,-1);
//r-=10000000;
//r%=100000;
//cout<<r<<"("<<r-10000000<<")"<<endl;
//cout<<r/100000-100<<" and "<<r%100000<<endl;
r/=100000;
r-=100;
if(r>0){
cout<<"positive";
}else if(r<0){
cout<<"negative";
}else{
cout<<"neutral";
}
return 0;
}
```
解法已经出来了,不过因为返回值一个当两个,允许的数据范围很小
by daiarineko @ 2021-01-22 22:49:10