全部评论
第二道不知道为什么过不去
%6是咋做到的😂
可以求个第二题吗
0.95,0.28,0.7,0
第二道题思想是总时间减当前时间得剩余时间,再按照前面从小到大排序求和,直到求的和大于剩余时间,统计已求和的个数,再前面总个数减已求和个数就是答案,是这个思路吗?
100, 100, 90, 8 太菜了
贴下第二题代码: #include<iostream> #include<vector> #include<queue> #include<iostream> using namespace std; int Get_Num(priority_queue<int> Prac,int sum,int total) { int ans = 0; while(total < sum) { sum -= Prac.top(); Prac.pop(); ans++; } return ans; } int main() { int T; cin>>T; while(T--) { int n,m; cin>>n>>m; int sum = 0; priority_queue<int> Prac; for(auto i = 0;i < n;i++) { int pi; cin>>pi; if(sum+pi <= m) { cout<<0<<" "; sum += pi; Prac.push(pi); }else { int total = m - pi; cout<<Get_Num(Prac,sum,total)<<' '; sum+=pi; Prac.push(pi); } } cout<<endl; } return 0; } 有人能帮我看一下我的第一题嘛: #include<string> #include<vector> #include<iostream> using namespace std; int main() { int n; cin>>n; string S; cin>>S; vector<int> lr(n,0); vector<int> cnt(n,0); for(auto i = 0 ; i < n; i ++) { if(i == 0) { if(S[i] == 'O') { cnt[i] = 0; }else { int j = i+1; while(S[j] != 'O') j++; lr[i] = 1; cnt[i] = j-i; } } else if(i == n-1) { if(S[i] == 'O') { cnt[i] = 0; } else { cnt[i] = cnt[i-1]+1; } } else { if(S[i] == 'O') { lr[i]=0; cnt[i] = 0; }else if(lr[i-1] == 1) { lr[i] = 1; cnt[i] = cnt[i-1] -1; }else if(lr[i-1] == 0) { if(S[i+1] == 'O') { lr[i] = 1; } else { lr[i] = -1; } cnt[i] = 1; } else { bool right = false; for(auto j = cnt[i-1]-1;j <= cnt[i-1]+1;j++) { if(S[i+j] == 'O') { right = true; cnt[i] = j; } } if(right == true) { lr[i] = 1; } else { lr[i] = -1; cnt[i] = cnt[i-1]+1; } } } } for(auto I:cnt) { cout<<I<<' '; } return 0; } 第二题全过了,第一题只过了10%
大佬,第二题求个思路。我用大根堆做,在Eclipse上感觉好好的,一提交 0%……
第二题是先把当前题目和之前的题目的时间求和,如果小于等于规定时间,直接返回0,如果大于的话,把之前的题目时间从小到大排序,从最大的时间开始减,直到时间总和小于等于规定时间,然后返回减掉的个数
求大佬解答最后一题
老哥第三题的输入该怎么处理呢?求问第三题
相关推荐
good_offer:神中神
点赞 评论 收藏
分享
查看63道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10-31 13:27
门头沟学院 Java 点赞 评论 收藏
分享