昨天训练赛的题..比划了好久才想出来什么意思
之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以..
思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2000
又想起高考概率无情的2分...哭一会先
另外 这题的输出我没看懂...试了好几遍才过...(好吧我承认我看答案了)
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<map> using namespace std; int n,p; int l[100050]; int r[100050]; int main() { while(~scanf("%d%d",&n,&p)) { for(int i=0;i<n;i++) { scanf("%d%d",&l[i],&r[i]); } l[n]=l[0]; r[n]=r[0]; double sum=0; for(int i=0;i<n;i++) { int x=(r[i]/p-(l[i]-1)/p);/// 偶数数量 int y=(r[i+1]/p-(l[i+1]-1)/p); int xx=(r[i]-l[i]+1)-x; ///奇数数量 int yy=(r[i+1]-l[i+1]+1)-y; double z=1.0-1.0*(xx*1.0*yy)/(r[i]-l[i]+1)/(r[i+1]-l[i+1]+1); sum+=2000.0*z; } printf("%.6f ",sum); } }