HDU4790
来源:互联网 发布:宋向金称臣 知乎 编辑:程序博客网 时间:2024/05/16 09:10
//这道题写了我两三天,队友都不愿意写了;
//整个人都不好了,其实这道题的算法还是比较简单的,就是当时脑子抽了,写的太累了,完全没有状态;
主要是利用区间的性质来解决问题的;
例如a--------------b;
c-------------------d;
那么我们可以看成
a+c--------------------a+d;
a+c+1-------------------a+d+1
. ........................................
b+c-----------------b+d
这样从a+c到b+c+1这段是等差数列,到这里就很明显了;
#include <iostream>#include<stdio.h>#include<string.h>#include<iostream>using namespace std;long long a,b,c,d,p,m;long long gcd(long long a,long long b){ if(b==0) return a; else return gcd(b,a%b);}long long sum(long long a,long long b){ long long chang=b-a+1; long long ans=0; long long k=a%p; if(k>m) chang-=p+m-k; if(k<m) chang-=m-k; if(chang<=0) return 0; long long m1=chang/p; //long long m2=m1; if(chang%p) m1++; ans+=(chang+chang-(m1-1)*p)*(m1)/2; //cout<<ans<<endl; return ans;}long long sum2(long long a,long long b){ long long chang=b-a+1;//cout<<chang<<endl; long long ans=0; long long k1=b%p; //cout<<k1<<endl; if(k1>m) chang-=k1-m; if(k1<m) chang-=p+k1-m; // cout<<chang<<endl; if(chang<=0) return 0; long long m1=chang/p; //long long m2=m1; // cout<<chang<<" "<<m1<<endl; if(chang%p) m1++; ans+=(chang+chang-(m1-1)*p)*(m1)/2; //cout<<3<<" "<<ans<<endl; return ans;}long long sum1(long long a,long long b){ //cout<<a<<" "<<b<<endl; long long chang=b-a+1; long long k1=a%p; if(k1>m) chang-=p+m-k1; if(k1<m) chang-=m-k1; if(chang<=0) return 0; long long m1=chang/p; if(chang%p) return m1+1; else return m1;}int main(){ long long case1,cnt=1; cin>>case1; while(case1--) { cin>>a>>b>>c>>d>>p>>m; long long k1,k2,k3,k4,k5; if(d-c>b-a) { k1=a+c; k2=a+d; k3=b+c; k4=b+d; k5=b-a+1; } else { k1=c+a; k2=c+b; k3=a+d; k4=d+b; k5=d-c+1; } //cout<<k1<<" "<<k2<<" "<<k3<<" "<<k4<<" "<<k5<<endl; long long ans1=sum2(k1,k3-1); long long ans2=sum(k2+1,k4); long long ans3=sum1(k3,k2)*k5; //cout<<ans3<<endl; long long m1=gcd((b-a+1)*(d-c+1),ans1+ans2+ans3); cout<<"Case #"<<cnt<<": "; cnt++; cout<<(ans1+ans2+ans3)/m1<<"/"<<(b-a+1)*(d-c+1)/m1<<endl; } return 0;}
0 0
- HDU4790
- 数学-HDU4790
- HDU4790 Just Random 【数学】
- HDU4790 Just Random
- hdu4790 Just Random
- 2013成都站J题||hdu4790 数论
- hdu4790 Just Random (当心啊!!!)
- HDU4790 Just Random 容斥原理,数学思路题
- 涨知识
- dataTable参考文档(中文版)
- 设计模式之代理模式(待续)
- Android listview与adapter用法(转载)
- 安装svn插件
- HDU4790
- 如何知道说谎
- SQL学习笔记
- 可以解决Windows内存问题的工具vmmap和rammap
- Handler Runnable与Thread的区别详解
- 第12周项目用递归求两个数的最大公约数
- Linux进程间通信——使用共享内存
- 大话设计—建造者模式
- mysql外键使用错误字段名称,不能删除或修改字段名