T1 组合数问题:

用k个不完全相同的组合数表示一个数n。

用k-1个1和一个n-k+1表示即可。

  1. #include<cstdio>
  2. using namespace std;
  3. int x,k;
  4. int main()
  5. {
  6. scanf("%d%d",&x,&k);
  7. for (int i=;i<k;i++) printf("%d %d\n",i,);
  8. printf("%d %d\n",x-k+,);
  9. return ;
  10. }

T2 喵呜:

问从第x棵树的y高度,跳到第1棵或第n棵树的1或h高度,最少跳跃次数。

跳跃有两种:往左或往右跳a棵树,每次可以往上跳b高度,或往下跳b高度。不能出界。

如果可以跳出界,那么之后一定会跳回正常范围。所以可以证明在跳跃次数一定时必然可构造出不出界的方案。

然后对于四种方案讨论一下:设跳跃距离=k*a,跳跃高度差=g*b。当k>g时,设x为向上跳的次数,x-(g-x)=k,所以x=(k+g)/2,所以只要(k+g)%2=0,x就有整数解。

该方案的最小跳跃次数取max(k,g)。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. typedef long long ll;
  5. const ll inf=1ll<<;
  6. ll read()
  7. {
  8. ll x=;char ch=getchar();
  9. while (ch<''||ch>'') ch=getchar();
  10. while (''<=ch&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
  11. return x;
  12. }
  13. ll n,h,x,y,a,b,Min;
  14. void solve(ll k,ll g)
  15. {
  16. if ((k+g)%==) Min=min(Min,max(k,g));
  17. }
  18. int main()
  19. {
  20. int T=read();
  21. while (T--)
  22. {
  23. n=read();h=read();x=read();y=read();a=read();b=read();
  24. if (abs(x-)%a!=&&abs(x-n)%a!=||abs(y-)%b!=&&abs(y-h)%b!=) {puts("-1");continue;}
  25. Min=inf;
  26. if (abs(x-)%a==&&abs(y-)%b==) solve(abs(x-)/a,abs(y-)/b);
  27. if (abs(x-)%a==&&abs(y-h)%b==) solve(abs(x-)/a,abs(y-h)/b);
  28. if (abs(x-n)%a==&&abs(y-)%b==) solve(abs(x-n)/a,abs(y-)/b);
  29. if (abs(x-n)%a==&&abs(y-h)%b==) solve(abs(x-n)/a,abs(y-h)/b);
  30. if (Min==inf) puts("-1");else printf("%lld\n",Min);
  31. }
  32. return ;
  33. }

注意&&不要手滑写成||。

T3 白金元首与七彩魔法:

给你一个色盘,求两个点之间的一条线段上的所有点最大的亮度值(计算方式略)。

计算一下线段的斜率,然后用微分的思想算出顶点在线段上的直角三角形的斜边长和tan。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. const double pi=acos(-);
  6. int T,a[],r[];
  7. double Max,k,b,x[],y[];
  8. double calc(double r,double g,double b)
  9. {return 0.3*r+0.59*g+0.11*b;}
  10. double solve(double a,double r)
  11. {
  12. if (a<) a+=;
  13. int h=a/;
  14. double f=a/60.0-h,p=-r,q=-f*r,t=-(-f)*r;
  15. if (h==) t=calc(,t,p);
  16. if (h==) t=calc(q,,p);
  17. if (h==) t=calc(p,,t);
  18. if (h==) t=calc(p,q,);
  19. if (h==) t=calc(t,p,);
  20. if (h==) t=calc(,p,q);
  21. return t;
  22. }
  23. int main()
  24. {
  25. scanf("%d",&T);
  26. while (T--)
  27. {
  28. scanf("%d%d%d%d",&a[],&r[],&a[],&r[]);
  29. for (int i=;i<=;i++)
  30. {
  31. double g=a[i]/180.0*pi;//math库中的三角函数参数是弧度制
  32. x[i]=cos(g)*r[i]/100.0;
  33. y[i]=sin(g)*r[i]/100.0;
  34. }
  35. x[]-=x[];y[]-=y[];Max=;
  36. for (int i=;i<=;i++)//切割
  37. {
  38. double X=x[]+(double)i/100000.0*x[];
  39. double Y=y[]+(double)i/100000.0*y[];
  40. Max=max(Max,solve(atan2(Y,X)/pi*,sqrt(X*X+Y*Y)));
  41. }
  42. printf("%.4lf\n",Max);
  43. }
  44. return ;
  45. }

注意不要把double开成int。

T4 组合数问题2:

求k个组合数的最大和,选取的每个组合数参数<=n且不完全相同。对1e9+7取模。

用一个大根堆维护组合数的大小。类似bfs从第n层中间那个往上方两个和左右扩展。

利用组合数的单调性还可以优化。

特技:用lgammal(x+1)-lgammal(y+1)-lgammal(x-y+1)可以比较出组合数的大小,避免卡精度。(这个东西好像是处理阶乘的log)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int mod=1e9+;
  5. const int N=;
  6. struct node{
  7. double x,y;
  8. node(double A,double B) {x=A;y=B;}
  9. };
  10. double calc(node A)
  11. {return lgammal(A.x+)-lgammal(A.y+)-lgammal(A.x-A.y+);}
  12. struct cmp{
  13. bool operator () (const node &A,const node &B)
  14. {return calc(A)<calc(B);}
  15. };
  16. priority_queue<node,vector<node>,cmp> p;
  17. int n,k,ans,jc[N],inv[N];
  18. map<int,int> mp[N];
  19. void init()
  20. {
  21. jc[]=jc[]=inv[]=inv[]=;
  22. for (int i=;i<=n;i++) jc[i]=(ll)jc[i-]*i%mod,inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
  23. for (int i=;i<=n;i++) inv[i]=(ll)inv[i-]*inv[i]%mod;
  24. }
  25. int c(int n,int m) {return (ll)jc[n]*inv[m]%mod*inv[n-m]%mod;}
  26. int main()
  27. {
  28. scanf("%d%d",&n,&k);init();
  29. p.push(node(n,n/));mp[n][n/]=;
  30. for (int i=;i<=k;i++)
  31. {
  32. node now=p.top();p.pop();int x=now.x,y=now.y;
  33. int v=c(x,y);
  34. ans=((ll)ans+v)%mod;
  35. if (x>=&&x->=y&&!mp[x-][y]) p.push(node(x-,y)),mp[x-][y]=;//注意边界限制!
  36. if (x>=&&y>=&&!mp[x-][y-]) p.push(node(x-,y-)),mp[x-][y-]=;
  37. if (y>=&&!mp[x][y-]) p.push(node(x,y-)),mp[x][y-]=;
  38. if (y+<=x&&!mp[x][y+]) p.push(node(x,y+)),mp[x][y+]=;
  39. }
  40. printf("%d\n",ans);
  41. return ;
  42. }

注意不要把取了模的东西扔进堆里比较。

code+第四次网络赛div2的更多相关文章

  1. (未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)

    刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也 ...

  2. 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree

    // 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以 ...

  3. (四面体)CCPC网络赛 HDU5839 Special Tetrahedron

    CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...

  4. hdu5017:补题系列之西安网络赛1011

    补题系列之西安网络赛1011 题目大意:给定一个椭球: 求它到原点的最短距离. 思路: 对于一个椭球的标准方程 x^2/a^2 + y^2/b^2 +z^2/c^2=1 来说,它到原点的最短距离即为m ...

  5. 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat

    题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...

  6. HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)

    Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. 2018 CCPC网络赛

    2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...

  8. luogu 1327 数列排序 & 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节

    luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...

  9. 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT

    2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...

随机推荐

  1. 2019ICPC南昌网络赛C Hello 2019

    题意:给出一个字符串,每次询问一个区间[l,r],求使得这个区间含有9102但不含有8102最少要删掉几个字符 首先我们考虑将串反转,这样就变成了含有2019但不含有2018的问题了 我们构建一个状态 ...

  2. 精选 Dubbo RPC 面试题,比较全面,含答案

    精选 Dubbo RPC 面试题,比较全面,含答案 hu1991die 搜云库技术团队 搜云库技术团队 微信号 souyunku 功能介绍 专注于分享最有价值的互联网技术干货文章,内容覆盖,Java后 ...

  3. 一键获取Android的appActvity和PackName

    大家平常写Appium自动化时,可能写脚本半小时,得有5分钟用来去看Activity,大部分都是通过adb命令的方式来获取.为了提高效率,可以把这个命令放到python里去执行,然后根据规则去筛选出自 ...

  4. debug breakpoint with maven in eclipse

  5. C#跨线程访问(二)----thread参数、回调传参数

    一.单个参数(封箱也可实现多参数) class B  {      public static void Main()      {          Thread t = new Thread(ne ...

  6. 笔记30 视图解析 ——TilesViewResolver

    Apache Tiles,定义适用于所有页面 的通用页面布局.Spring MVC以视图解析器的形式为Apache Tiles提 供了支持,这个视图解析器能够将逻辑视图名解析为Tile定义.  1.配 ...

  7. vue for 循环例子 2

    demo <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...

  8. net core静态文件 访问除默认目录文件配置

    在我们项目的实际应用中,不光是需要访问默认静态文件夹 wwwroot ,还有可能要要去访问除默认目录以外的文件夹,接下来我们进行配置 1.在根目录创建一个文件夹,继续创建它的子文件夹Images,在I ...

  9. leetcood学习笔记-102-二叉树的层次遍历

    题目描述: 方法一; class Solution(object): def levelOrder(self, root): """ :type root: TreeNo ...

  10. 区别 |DCL |DDL |DML |DQL

    DCL(Data Control Language)数据控制语言: 用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句.这个比较少用到. 对于大多数人,在公司一 ...