HITACorz @ 2019-10-04 22:14:52
#include<iostream>
#include<algorithm>
using namespace std;
struct tt{
int xi;//hight
int yi;//strength
};
bool comparisonxi(tt a,tt b){
return a.xi<b.xi;
}
bool comparisonyi(tt a,tt b){
return a.yi<b.yi;
}
int main()
{
const int MAX=5100;
tt tao[MAX];
tt nw[MAX];
int n,a,s,xi,yi,b;
int i;
int num=0,temp=0;
int k;
cin>>n>>s>>a>>b;
for(i=1;i<n;i++)
{
cin>>tao[i].xi>>tao[i].yi;
}
sort(tao+1,tao+n,comparisonxi);
for(i=1;i<=n;i++)
{
if(tao[i].xi<=(a+b))
{
nw[i].xi=tao[i].xi;
nw[i].yi=tao[i].yi;
num++;
}
else break;
}
sort(nw+1,nw+num+1,comparisonyi);
k=num;
for(i=1;i<=num;i++)
{
if(b>=0&&k>0)
{
b=b-nw[i].yi;
temp++;
k--;
}
else break;
}
cout<<temp;
return 0;
}
by SadLava @ 2019-10-04 22:52:54
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct app{
int gd;//该苹果的高度
int lq;//摘苹果的力气
};
bool cmp(app a,app b){
return b.lq>a.lq;
}
int main(){
vector<app> apples;
int lq;//余剩力气
int apple;//苹果数量
int yz;//椅子高度
int sc;//手长度
int ans=0;
app it;
scanf("%d%d%d%d",&apple,&lq,&yz,&sc);
for(int i=0;i<apple;i++){
scanf("%d",&it.gd);
scanf("%d",&it.lq);
if(yz+sc>=it.gd){
apples.push_back(it);
}
}
sort(apples.begin(),apples.end(),cmp);
for(int i=0;i<apples.size() && lq-apples[i].lq>=0;i++){
lq-=apples[i].lq;
ans++;
}
printf("%d",ans);
return 0;
}
码风不同,只能参考了
by charm1 @ 2019-10-04 22:52:58
@JryACtrying b=b-nw[i].yi; 应该是s吧
by HITACorz @ 2019-10-04 22:57:08
@charm1 Oh ,我的天呐,我沙雕了。 但是,刚刚试了下,第四个点还是RE……
by HITACorz @ 2019-10-04 22:57:46
@SadLava 谢谢大佬,等我学了vector以后一定会看您的代码
by charm1 @ 2019-10-05 12:30:41
if(tao[i].xi<=(a+b))
{
nw[i].xi=tao[i].xi;
nw[i].yi=tao[i].yi;
num++;
}
改为
if(tao[i].xi<=(a+b))
{
num++;
nw[num].xi=tao[i].xi;
nw[num].yi=tao[i].yi;
}
by charm1 @ 2019-10-05 12:31:01
@JryACtrying
by HITACorz @ 2019-10-05 13:24:00
@charm1 改了,但是结果跟原来一样! 1 2 AC 3 WA 4 RE 5 WA
昨天晚上我思考了一下,我的原来的代码有点复杂,sort多排了一次,第一次的高度没必要排序,只将力量排序然后进行高度判断就可以了 代码如下
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=5100;
struct tt{
int xi;//hight
int yi;//strength
}tao[MAX];
// tt ;
// tt nw[MAX];
bool comparisonxi(tt a,tt b){
return a.xi<b.xi;
}
bool comparisonyi(tt a,tt b){
return a.yi<b.yi;
}
int main()
{
int n,a,s,xi,yi,b;
int i;
int num=0,temp=0;
int k;
cin>>n>>s>>a>>b;
//scanf("%d%d%d%d",&n,&s,&a,&b);
for(i=1;i<n;i++)
{
cin>>tao[i].xi>>tao[i].yi;
// scanf("%d%d",&xi,&yi);
}
sort(tao+1,tao+n+1,comparisonyi);
for(i=1;i<=n;i++)
{
if(tao[i].xi==0) continue;
if(tao[i].xi<=(a+b)&&s>=0)
{
s=s-tao[i].yi;
num++;
// continue;
}
else continue;
}
cout<<num;
return 0;
}
这个的测评结果第四个不是RE了 测评结果是1 2 4 AC 3 5是WA,我的数据下载次数上限了,第3个数据下载不了,于是没办法继续调试了,于是不知道哪里出错
by HITACorz @ 2019-10-05 14:23:23
@charm1 大佬,我终于过了,我改了一下,好像是我对结构体的输入一开始有问题 下面这个代码AC了,谢谢你了!
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=5100;
struct tt{
int xi;//hight
int yi;//strength
}tao[MAX];
//bool comparisonxi(tt a,tt b){
// return a.xi<b.xi;
//}
bool comparisonyi(tt a,tt b){
return a.yi<b.yi;
}
int main()
{
int n,a,s,xi,yi,b;
int i;
int num=0,temp=0;
int k;
cin>>n>>s>>a>>b;
//scanf("%d%d%d%d",&n,&s,&a,&b);
for(i=1;i<=n;i++)
{
cin>>tao[i].xi>>tao[i].yi;
// scanf("%d%d",&xi,&yi);
}
sort(tao+1,tao+n+1,comparisonyi);
for(i=1;i<=n;i++)
{
if(tao[i].xi==0&&tao[i].yi==0) continue;
if(tao[i].xi<=(a+b)&&s>0)
{
s=s-tao[i].yi;
if(s>=0)
num++;
// continue;
}
// else continue;
}
cout<<num;
return 0;
}