为什么这样能过,甚至b/a连double型都用转换 #include<iostream> #include<cmath> #include<algorithm> using namespace std; typedef struct { int x,h; }zhuzi; zhuzi zhu[100010]; bool cmp(const zhuzi a,const zhuzi b) { return a.x<b.x; } int main() { int n,i,j; int count; int a,b; double yingzi,max; while(scanf("%d",&n)==1&&n) { for(i=0;i<n;i++) scanf("%d%d",&zhu[i].x,&zhu[i].h); sort(zhu,zhu+n,cmp);//按x值从小到大排序 scanf("%d/%d",&a,&b); count=0;//找不完全处在阴影中的个数 max=0; for(i=0;i<n;i++) { yingzi=zhu[i].x+zhu[i].h*b*1.0/a; if(max<yingzi) { count++; max=yingzi; } } printf("%d/n",count); } return 0; } 而这样死活都不能过,白白浪费我半天的时间 #include<iostream> #include<cmath> #include<algorithm> using namespace std; typedef struct { int x,h; }zhuzi; zhuzi zhu[100010]; bool cmp(const zhuzi a,const zhuzi b) { return a.x<b.x; } int main() { int n,i,j; int count; int a,b; while(scanf("%d",&n)==1&&n) { for(i=0;i<n;i++) scanf("%d%d",&zhu[i].x,&zhu[i].h); sort(zhu,zhu+n,cmp);//按x值从小到大排序 scanf("%d/%d",&a,&b); count=0;//找完全处在阴影中的个数 for(i=0;i<n-1;i++) { //如果没有完全处在阴影中的柱子,往后找完全处在它的阴影中的柱子 for(j=i+1;j<n;j++) { if((zhu[i].h-zhu[j].h)/b>=(zhu[j].x-zhu[i].x)/a) { count++; } else { i=j-1;break;}//如果阴影被挡 } if(j==n) break; } printf("%d/n",n-count); } return 0; }