[关闭]
@994495jj 2017-05-31T11:47:47.000000Z 字数 3905 阅读 777

FZU周练-0528老队员场题解

(ACM)数学----概率论



题目链接


B. HIT 3209 Mod! Mod! Mod!

题意

题解

代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6. #include <string>
  7. #include <cmath>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int,int> pii;
  15. typedef pair<ll,ll> pll;
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define lson l,mid,rt<<1
  21. #define rson mid+1,r,rt<<1|1
  22. #define de(x) cout << #x << "=" << x << endl
  23. const int N=100005;
  24. int a[N],b[N],Max[N<<2];
  25. void build(int l,int r,int rt) {
  26. if(l==r) {
  27. Max[rt]=b[l];
  28. return ;
  29. }
  30. int mid=(l+r)>>1;
  31. build(lson);
  32. build(rson);
  33. Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
  34. }
  35. void upd(int c,int l,int r,int rt) {
  36. if(c>Max[rt]) return ;
  37. if(l==r) {
  38. b[l]=b[l]%c;
  39. Max[rt]=b[l];
  40. return ;
  41. }
  42. int mid=(l+r)>>1;
  43. upd(c,lson);
  44. upd(c,rson);
  45. Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
  46. }
  47. int main() {
  48. int T;scanf("%d\n",&T);
  49. while(T--) {
  50. ///read
  51. int n;scanf("%d",&n);
  52. for(int i=1;i<=n;++i) scanf("%d",a+i);
  53. int m;scanf("%d",&m);
  54. for(int i=1;i<=m;++i) scanf("%d",b+i);
  55. ///solve
  56. build(1,m,1);
  57. for(int i=1;i<=n;++i) upd(a[i],1,m,1);
  58. ///print
  59. for(int i=1;i<=m;++i) printf("%d\n",b[i]);
  60. }
  61. return 0;
  62. }

E. HIT 3212 Traverse graph

题意

题解

代码

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. using namespace std;
  5. #define mp make_pair
  6. #define pb push_back
  7. #define fi first
  8. #define se second
  9. const int N=5005;
  10. vector<pair<int,int> > G[N];
  11. int ans;
  12. int col[N];
  13. int dfs(int u) {
  14. int sz=G[u].size();
  15. for(int i=0;i<sz;++i) {
  16. int v=G[u][i].fi;
  17. int ty=G[u][i].se;
  18. if(col[v]!=-1) {
  19. if(ty&&col[v]!=col[u]) return ans=-1;
  20. if(!ty&&col[v]!=1-col[u]) return ans=-1;
  21. } else {
  22. if(ty) col[v]=col[u];
  23. else col[v]=1-col[u];
  24. dfs(v);
  25. }
  26. }
  27. return 1;
  28. }
  29. int main() {
  30. int T;scanf("%d",&T);
  31. while(T--) {
  32. ///
  33. int n,m;scanf("%d%d",&n,&m);
  34. ///init
  35. for(int i=1;i<=n;++i) G[i].clear();
  36. memset(col,-1,sizeof(col));
  37. ans=0;col[1]=0;
  38. ///read
  39. for(int i=1;i<=m;++i) {
  40. int u,v;char c;
  41. scanf("%d%d %c",&u,&v,&c);
  42. G[u].pb(mp(v,c=='R'));
  43. G[v].pb(mp(u,c=='R'));
  44. }
  45. ///solve
  46. dfs(1);
  47. if(ans==-1) puts("-1");
  48. else {
  49. for(int i=1;i<=n;++i) ans=ans+col[i];
  50. printf("%d\n",min(ans,n-ans));
  51. }
  52. }
  53. return 0;
  54. }

G. HIT 3214 Greedy Game

题意

题解

代码

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<queue>
  4. using namespace std;
  5. typedef long long ll;
  6. const int N=1005;
  7. struct Node {
  8. int x,y;
  9. bool operator < (const Node &tmp) const {
  10. if(x==tmp.x) return y>tmp.y;
  11. return x>tmp.x;
  12. }
  13. }a[N];
  14. priority_queue<int> q;
  15. int main() {
  16. int T;scanf("%d",&T);
  17. while(T--) {
  18. ///
  19. int n;scanf("%d",&n);
  20. ///init
  21. int tt=q.size();
  22. while(tt--) q.pop();
  23. ///read
  24. for(int i=1;i<=n;++i) scanf("%d",&a[i].x);
  25. for(int i=1;i<=n;++i) scanf("%d",&a[i].y);
  26. ///sort
  27. sort(a+1,a+1+n);
  28. ///solve
  29. for(int i=2;i<=n;++i) {
  30. if(i&1) {
  31. if(a[i].y>-q.top()) {
  32. q.pop();
  33. q.push(-a[i].y);
  34. }
  35. } else {
  36. q.push(-a[i].y);
  37. }
  38. }
  39. ///print
  40. ll ans=0;
  41. while(!q.empty()) {
  42. ans=ans-q.top();
  43. q.pop();
  44. }
  45. printf("%lld\n",ans);
  46. }
  47. return 0;
  48. }

J. HIT 3207 GiriGiri Eye~(概率论)

题意

题解

代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6. #include <string>
  7. #include <cmath>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int,int> pii;
  15. typedef pair<ll,ll> pll;
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define lson l,m,rt<<1
  21. #define rson m+1,r,rt<<1|1
  22. #define de(x) cout << #x << "=" << x << endl
  23. double kpow(double a,ll b) {
  24. double r=1;
  25. while(b) {
  26. if(b&1) r=r*a;
  27. a=a*a;
  28. b>>=1;
  29. }
  30. return r;
  31. }
  32. int main() {
  33. //freopen("xx.out","w",stdout);
  34. int T;scanf("%d",&T);
  35. while(T--) {
  36. int n,m;scanf("%d%d",&n,&m);
  37. double ans=0;
  38. for(int i=1;i<=n;++i) {
  39. double p=1-(1.0*(i-1)*(i-1)+1.0*(n-i)*(n-i))/n/n;
  40. ans=ans+(1+kpow(1-2*p,m))/2;
  41. }
  42. printf("%.3lf",ans);
  43. if(T) puts("");
  44. }
  45. return 0;
  46. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注