3 条题解
-
2
#include <iostream> #include <algorithm> using namespace std; long long n , m , b[200005] , bi , c[200005] , ci , j; int main(){ cin >> n ; for(int i = 0 ; i < n ; i ++) cin >> b[i];//输入禾木时间 for(int i = 0 ; i < n ; i ++){ cin >> c[i];//输入桃子时间 if(b[i] > c[i]) //因为bi , ci 在循环时永远不会大于i,且后续不用双方时间, //所以可以直接覆盖原数组 b[bi++] = b[i] - c[i];//桃子用时小于禾木的题 else c[ci++] = c[i] - b[i];//桃子用时大于禾木的题 } m += bi*(bi-1)/2;//两道用时小的加起来一定小,所以直接加上任意两题的组合数 sort(c,c+ci);//排序,数组c按从小到大 sort(b,b+bi);//同上 n = 0;//后续不需要n,直接覆盖 for(int i = 0 ; i < bi ; i ++){ m += n ; //因为排过序,所以当c[i] < b[j] 时, c[i] < b[j+1] //所以n表示循环前有多少题不用判断直接可以加上 for(1; j < ci ; j ++){//j不用重置,因为c[0]~c[j]必定成立 if(b[i] - c[j] > 0) //判断,若此时成立,b[j]及以后都成立,下次可以不用判断,直接n ++ 即可 m ++ , n ++ ; else break ; //否则不成立,接下来更不可能成立,直接跳出 } } cout << m ; return 0 ; }
-
0
最基础的方法暴力枚举,但只有50分
#include <iostream> using namespace std; int n , a[200005][2] , m; int main(){ cin >> n ; for(int i = 0 ; i < n ; i ++) cin >> a[i][0];//输入禾木时间 for(int i = 0 ; i < n ; i ++) cin >> a[i][1];//输入桃子时间 for(int i = 0 ; i < n ; i ++) for(int j = 0 ; j < i ; j ++)//双循环,暴力枚举两题 m += (a[i][0]+a[j][0] > a[i][1]+a[j][1]) ; //若禾木总时间大于桃子,成立 cout << m ;//输出 return 0 ;//真的太简单了!(就是没分) }
优化亿点点后:
#include <iostream> #include <algorithm> using namespace std; long long n , m , b[200005] , bi , c[200005] , ci , j; int main(){ cin >> n ; for(int i = 0 ; i < n ; i ++) cin >> b[i];//输入禾木时间 for(int i = 0 ; i < n ; i ++){ cin >> c[i];//输入桃子时间 if(b[i] > c[i]) //因为bi , ci 在循环时永远不会大于i,且后续不用双方时间, //所以可以直接覆盖原数组 b[bi++] = b[i] - c[i];//桃子用时小于禾木的题 else c[ci++] = c[i] - b[i];//桃子用时大于禾木的题 } m += bi*(bi-1)/2;//两道用时小的加起来一定小,所以直接加上任意两题的组合数 sort(c,c+ci);//排序,数组c按从小到大 sort(b,b+bi);//同上 n = 0;//后续不需要n,直接覆盖 for(int i = 0 ; i < bi ; i ++){ m += n ; //因为排过序,所以当c[i] < b[j] 时, c[i] < b[j+1] //所以n表示循环前有多少题不用判断直接可以加上 for(1; j < ci ; j ++){//j不用重置,因为c[0]~c[j]必定成立 if(b[i] - c[j] > 0) //判断,若此时成立,b[j]及以后都成立,下次可以不用判断,直接n ++ 即可 m ++ , n ++ ; else break ; //否则不成立,接下来更不可能成立,直接跳出 } } cout << m ; return 0 ; }
-
-8
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1239
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 402
- 已通过
- 116
- 上传者