A. 严格按照题目给的两个条件来。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,a[],b[];
  5.  
  6. int main()
  7. {
  8. ios::sync_with_stdio(false);
  9. cin >> n;
  10. for(int i = ;i <= n;i++) cin >> a[i] >> b[i];
  11. int flag1 = ,flag2 = ;
  12. for(int i = ;i <= n;i++)
  13. {
  14. if(a[i] != b[i]) flag1 = ;
  15. }
  16. for(int i = ;i < n;i++)
  17. {
  18. if(a[i] < a[i+]) flag2 = ;
  19. }
  20. if(flag1) cout << "rated" <<endl;
  21. else if(flag2) cout << "unrated" << endl;
  22. else cout << "maybe" << endl;
  23. return ;
  24. }

B.可能的值为xx = x+50k(xx >= y),从小到大枚举每一个可能的值,计算cnt就可以了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int x,y,p,a[];
  5.  
  6. int main()
  7. {
  8. ios::sync_with_stdio(false);
  9. cin >> p >> x >> y;
  10. int xx = x;
  11. while(x >= y)
  12. {
  13. int t = x/%;
  14. for(int i = ;i <= ;i++)
  15. {
  16. t = (t*+)%;
  17. a[i] = t+;
  18. if(a[i] == p)
  19. {
  20. cout << << endl;
  21. return ;
  22. }
  23. }
  24. x -= ;
  25. }
  26. x = xx;
  27. int cnt = ,now = ;
  28. while()
  29. {
  30. int t = x/%;
  31. for(int i = ;i <= ;i++)
  32. {
  33. t = (t*+)%;
  34. a[i] = t+;
  35. if(a[i] == p)
  36. {
  37. cout << cnt << endl;
  38. return ;
  39. }
  40. }
  41. x += ;
  42. now++;
  43. if(now == )
  44. {
  45. now = ;
  46. cnt++;
  47. }
  48. }
  49. return ;
  50. }

C.先判断0和-1的情况,然后按大小分类。

若x/y < p/q,我们要把x/y变得尽量大,并且最后的值是p/q,可以变成(np-(y-x))/nq,计算n向上取整,然后结果为nq-y。

若x/y > p/q,我们要把x/y变得尽量小,即只加分母,不加分子,最后变成x/nq == np/nq,计算n向上取整,结果同上。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long x,y,xx,yy;
  5.  
  6. int main()
  7. {
  8. ios::sync_with_stdio(false);
  9. int T;
  10. cin >> T;
  11. while(T--)
  12. {
  13. cin >> x >> y >> xx >> yy;
  14. if(x*yy == y*xx)
  15. {
  16. cout << << endl;
  17. continue;
  18. }
  19. if(x != && xx == || xx >= yy)
  20. {
  21. cout << - << endl;
  22. continue;
  23. }
  24. if(x*yy < xx*y)
  25. {
  26. long long t = y-x;
  27. long long ans = t/(yy-xx);
  28. if(ans*yy-t < ans*xx) ans++;
  29. cout << ans*yy-y << endl;
  30. }
  31. else
  32. {
  33. long long ans = x/xx;
  34. if(ans*xx < x) ans++;
  35. cout << ans*yy-y << endl;
  36. }
  37. }
  38. return ;
  39. }

还可以二分n值来写。


D.暴力枚举到100000就可以了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,a[][],b[] = {},c[];
  5.  
  6. int calc(int x,int y,int z)
  7. {
  8. int t = -x;
  9. if(x == -) return ;
  10. if(*y > z) return *t;
  11. if(*y > z) return *t;
  12. if(*y > z) return *t;
  13. if(*y > z) return *t;
  14. if(*y > z) return *t;
  15. return *t;
  16. }
  17.  
  18. bool ok(int x)
  19. {
  20. int sum1 = ,sum2 = ;
  21. for(int i = ;i <= ;i++) c[i] = b[i];
  22. for(int i = ;i <= ;i++)
  23. {
  24. if(a[][i] != - && a[][i] > a[][i]) c[i] += x;
  25. }
  26. for(int i = ;i <= ;i++)
  27. {
  28. sum1 += calc(a[][i],c[i],n+x);
  29. sum2 += calc(a[][i],c[i],n+x);
  30. }
  31. return sum1 > sum2;
  32. }
  33. int main()
  34. {
  35. ios::sync_with_stdio(false);
  36. cin >> n;
  37. for(int i = ;i <= n;i++)
  38. {
  39. for(int j = ;j <= ;j++)
  40. {
  41. cin >> a[i][j];
  42. if(a[i][j] >= ) b[j]++;
  43. }
  44. }
  45. for(int i = ;i <= ;i++)
  46. {
  47. if(ok(i))
  48. {
  49. cout << i << endl;
  50. return ;
  51. }
  52. }
  53. cout << - << endl;
  54. return ;
  55. }

E.分别对2的倍数,与2倍数间隔间的数计数,结果个数最多为1的个数,对每个个数,我们判断其是否可行。

我们贪心当前2的倍数之后一个的2的倍数,使剩下来的2的倍数的数量和非2倍数数量和尽可能少,因为剩下的个数为最小的划分的数的个数。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,now = ,num[] = {},two[] = {},ans[];
  5.  
  6. bool ok(int x)
  7. {
  8. int t = two[]-x;
  9. for(int i = ;i <= now;i++)
  10. {
  11. if(x >= two[i])
  12. {
  13. t -= min(x-two[i],t);
  14. x = two[i];
  15. }
  16. else t += two[i]-x;
  17. t += num[i];
  18. }
  19. if(t <= x) return ;
  20. return ;
  21. }
  22.  
  23. int main()
  24. {
  25. ios::sync_with_stdio(false);
  26. cin >> n;
  27. long long t = ;
  28. for(int i = ;i <= n;i++)
  29. {
  30. long long x;
  31. cin >> x;
  32. if(x == t) two[now]++;
  33. else if(x < t) num[now-]++;
  34. else
  35. {
  36. while(t < x)
  37. {
  38. t *= ;
  39. now++;
  40. }
  41. if(x == t) two[now]++;
  42. else num[now-]++;
  43. }
  44. }
  45. int cnt = ;
  46. for(int i = ;i <= two[];i++)
  47. {
  48. if(ok(i)) ans[++cnt] = i;
  49. }
  50. if(cnt == ) cout << - << endl;
  51. else
  52. {
  53. for(int i = ;i <= cnt;i++) cout << ans[i] << " ";
  54. cout << endl;
  55. }
  56. return ;
  57. }

F.首先一种特殊情况,我们选择权值最小(w0)的一条边,设其两点为A,B,不难理解,A,B两点的总p值均为(n-1)*w0。

然后,对于其他的点,取点a,每个点连接着(n-1)条边,对于每条边,权值为w1,设它连的点为a,b,那么,我们可以把除a,b外的所有点先连成最小,即所有边最终跑向A或B,即(n-3)*w0,然后连接A到b或者B到b,再b到a,这里最后两条路径的权值分为两种情况:①若前一点->b 大于 b->a,则总p值为(n-3)*w0+2*w1

②若前一点->b 小于 b->a,则总p值为(n-3)*w0+w前一点->b+w1

这样的情况下,我们在(n-1)*2种情况里取的最小p值为最优解。

第一种情况比较好求解,第二种情况我们可以从到b点的最优转换而来,把原来的a去掉,在最后加上b->a,即-minn+w1

这样我们就对求解顺序有一定的要求,按边权值从小到大排序,每次更新边的两个点,是符合要求的。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n;
  5. long long ans[];
  6. struct xx
  7. {
  8. int u,v,w;
  9. xx(int a,int b,int c):u(a),v(b),w(c){};
  10. friend bool operator <(xx a,xx b)
  11. {
  12. return a.w < b.w;
  13. }
  14. };
  15.  
  16. vector<xx> v;
  17.  
  18. int main()
  19. {
  20. ios::sync_with_stdio(false);
  21. cin >> n;
  22. for(int i = ;i <= n;i++) ans[i] = 1e18;
  23. for(int i = ;i <= n;i++)
  24. {
  25. for(int j = i+;j <= n;j++)
  26. {
  27. int x;
  28. cin >> x;
  29. v.push_back(xx(i,j,x));
  30. }
  31. }
  32. sort(v.begin(),v.end());
  33. long long minn = v[].w;
  34. for(int i = ;i < v.size();i++)
  35. {
  36. int x = v[i].u,y = v[i].v,w = v[i].w;
  37. long long t = (long long)w*+minn*(n-);
  38. ans[x] = min(ans[x],min(ans[y]-minn+w,t));
  39. ans[y] = min(ans[y],min(ans[x]-minn+w,t));
  40. }
  41. for(int i = ;i <= n;i++) cout << ans[i] << endl;
  42. return ;
  43. }

Codeforces_807的更多相关文章

随机推荐

  1. C#反射与特性(六):设计一个仿ASP.NETCore依赖注入Web

    目录 1,编写依赖注入框架 1.1 路由索引 1.2 依赖实例化 1.3 实例化类型.依赖注入.调用方法 2,编写控制器和参数类型 2.1 编写类型 2.2 实现控制器 3,实现低配山寨 ASP.NE ...

  2. SQL Server2012高可用之日志传送测试

    (一)日志传送架构 (1.1)相关服务器 主服务器   :用于生产的服务器,上面运行这生产SQL Server数据库: 辅助服务器:用于存放主服务器上数据库的一个“镜像”数据库: 监控服务器:用来监控 ...

  3. 小程序中组件公用属性和data-的使用

    属性名                类型                   描述                              注解 hidden                Boo ...

  4. Unity_Dungeonize 随机生成迷宫

    本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物 ...

  5. 贪心 + DFS

    A New Year party is not a New Year party without lemonade! As usual, you are expecting a lot of gues ...

  6. VMware Workstation CentOS7 Linux 学习之路(1)--系统安装

      前言 很早就想学习Linux了,出去面试很多家公司都问会不会Linux,都很尴尬,一直没学过Linux,在网上也看过很多资料,也安装了VM,自己摸索着学习Linux,之前看网上的一些命令一顿操作, ...

  7. mysql高级复习

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构,可以简单理解为“排好序的快速查找数据结构”. 数据本身之外,数据库还维护着一 ...

  8. Scrapy定制命令开启爬虫

    一.单爬虫运行 每次运行scrapy都要在终端输入命令太麻烦了 在项目的目录下创建manager.py(任意名称) from scrapy.cmdline import execute if __na ...

  9. 异数OS 织梦师-云(五)-- 容器服务化,绿色拯救未来。

    . 异数OS 织梦师-云(五)– 容器服务化,绿色拯救未来. 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 652 ...

  10. [bzoj4524] [loj#2047] [Cqoi2016] 伪光滑数

    Description 若一个大于 \(1\) 的整数 \(M\) 的质因数分解有 \(k\) 项,其最大的质因子为 \(Ak\) ,并且满足 \(Ak^K \leq N\) , \(Ak<12 ...