A:不管有没有负数 一顿操作之后肯定只有正数 又因为A=A-B 所以最大值是一直在减小的 所以一定有结果

B:..一开始以为求min操作数 WA了2发 直接求所有数的GCD如果所有数的GCD都不是1的话就无解 有解就无脑扫2次就好了

C:给你一个char正方形矩阵 要求a[i][j]四个正方形对称轴都一样 可以任意change  直接爆搜八分之一块就行了.

  1. #include <bits/stdc++.h>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define foror(i,a,b) for(i=a;i<b;i++)
  6. #define foror2(i,a,b) for(i=a;i>b;i--)
  7. #define EPS 1.0e-8
  8. #define PI acos(-1.0)
  9. #define INF 3000000000
  10. #define MOD 1000000007
  11. #define mem(a,b) memset((a),b,sizeof(a))
  12. #define TS printf("!!!\n")
  13. #define lson o<<1, l, m
  14. #define rson o<<1|1, m+1, r
  15. //using ll = long long;
  16. //using ull= unsigned long long;
  17. //std::ios::sync_with_stdio(false);
  18. using namespace std;
  19. //priority_queue<int,vector<int>,greater<int>> que;
  20. int cmp(int a,int b)
  21. {
  22. return a<b;
  23. }
  24. char s[][];
  25. int visit[][];
  26. int gcd1(int a, int b)
  27. { return a == ? b : gcd1(b % a, a); }
  28. map<char,int> mp;
  29. int main()
  30. {
  31. //freopen("in.txt", "r", stdin);
  32. //freopen("out.txt", "w", stdout);
  33. int t;
  34. cin >> t;
  35. while(t--)
  36. {
  37. int anser=;
  38. int n;
  39. char ch;
  40. cin >> n;
  41. int mid=(n+)/;
  42. for(int i=;i<=n;i++)
  43. mem(visit[i],);
  44. for(int i=;i<=n;i++)
  45. {
  46. scanf("%s",s[i]+);
  47. }
  48. /*for(int i=1;i<=n;i++)
  49. {
  50. printf("%s\n",s[i]+1);
  51. }*/
  52. int maxn=;
  53. for(int i=;i<=(n+)/;i++)
  54. for(int j=;j<=(n+)/;j++)
  55. {
  56. if(visit[i][j]==)
  57. continue;
  58. if(i==j&&i+j==n+)
  59. continue;
  60. if(i==j||i+j==n+||*i==n+||*j==n+)
  61. {
  62. int ans=;
  63. mp.clear();
  64. mp[s[i][j]]++;
  65. mp[s[i][n+-j]]++;
  66. mp[s[n+-i][j]]++;
  67. mp[s[n+-i][n+-j]]++;
  68. mp[s[j][i]]++;
  69. mp[s[n+-j][i]]++;
  70. mp[s[j][n+-i]]++;
  71. mp[s[n+-j][n+-i]]++;
  72. visit[i][j]=;
  73. visit[i][n+-j]=;
  74. visit[n+-i][j]=;
  75. visit[n+-i][n+-j]=;
  76. visit[j][i]=;
  77. visit[n+-j][i]=;
  78. visit[j][n+-i]=;
  79. visit[n+-j][n+-i]=;
  80. ans=max(ans,mp[s[i][j]]);
  81. ans=max(ans,mp[s[i][n+-j]]);
  82. ans=max(ans,mp[s[n+-i][j]]);
  83. ans=max(ans,mp[s[n+-i][n+-j]]);
  84. ans=max(ans,mp[s[j][i]]);
  85. ans=max(ans,mp[s[n+-j][i]]);
  86. ans=max(ans,mp[s[j][n+-i]]);
  87. ans=max(ans,mp[s[n+-j][n+-i]]);
  88. //cout <<i << ""<<j<<endl;
  89. //cout<<4-ans/2<<endl;
  90. anser+=-ans/;
  91. }
  92. else
  93. {
  94. int ans=;
  95. mp.clear();
  96. mp[s[i][j]]++;
  97. mp[s[i][n+-j]]++;
  98. mp[s[n+-i][j]]++;
  99. mp[s[n+-i][n+-j]]++;
  100. mp[s[j][i]]++;
  101. mp[s[n+-j][i]]++;
  102. mp[s[j][n+-i]]++;
  103. mp[s[n+-j][n+-i]]++;
  104. visit[i][j]=;
  105. visit[i][n+-j]=;
  106. visit[n+-i][j]=;
  107. visit[n+-i][n+-j]=;
  108. visit[j][i]=;
  109. visit[n+-j][i]=;
  110. visit[j][n+-i]=;
  111. visit[n+-j][n+-i]=;
  112. ans=max(ans,mp[s[i][j]]);
  113. ans=max(ans,mp[s[i][n+-j]]);
  114. ans=max(ans,mp[s[n+-i][j]]);
  115. ans=max(ans,mp[s[n+-i][n+-j]]);
  116. ans=max(ans,mp[s[j][i]]);
  117. ans=max(ans,mp[s[n+-j][i]]);
  118. ans=max(ans,mp[s[j][n+-i]]);
  119. ans=max(ans,mp[s[n+-j][n+-i]]);
  120. //cout <<i << ""<<j<<endl;
  121. //cout <<8-ans<<endl;
  122. anser+=-ans;
  123. }
  124. }
  125. cout << anser<<endl;
  126. }
  127. return ;
  128. }

D:画人脸

  1. #include <bits/stdc++.h>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define foror(i,a,b) for(i=a;i<b;i++)
  6. #define foror2(i,a,b) for(i=a;i>b;i--)
  7. #define EPS 1.0e-8
  8. #define PI acos(-1.0)
  9. #define INF 3000000000
  10. #define MOD 1000000009
  11. #define mem(a,b) memset((a),b,sizeof(a))
  12. #define TS printf("!!!\n")
  13. #define lson o<<1, l, m
  14. #define rson o<<1|1, m+1, r
  15. //using ll = long long;
  16. //using ull= unsigned long long;
  17. //std::ios::sync_with_stdio(false);
  18. using namespace std;
  19. //priority_queue<int,vector<int>,greater<int>> que;
  20. char ans[][][];
  21. int len1[],len2[];
  22. void init()
  23. {
  24. for(int i=;i<;i++)
  25. for(int j=;j<;j++)
  26. ans[][i][j]='*';
  27. ans[][][]=ans[][][]=ans[][][]=' ';
  28. ans[][][]=ans[][][]=ans[][][]=' ';
  29. ans[][][]=ans[][][]=ans[][][]=' ';
  30. ans[][][]=ans[][][]=ans[][][]=' ';
  31. ans[][][]=ans[][][]=' ';
  32. ans[][][]=ans[][][]=' ';
  33. len1[]=,len2[]=;
  34. for(int i=;i<=;i++)
  35. len1[i]=len1[i-]*+;
  36. for(int i=;i<=;i++)
  37. len2[i]=len2[i-]*+;
  38. }
  39. void draw1(int x,int x1,int y1,int x2,int y2)//y2>y1 x2>x1
  40. {
  41. if(x1==x2)
  42. {
  43. for(int i=y1;i<=y2;i++)
  44. {
  45. ans[x][x1][i]='*';
  46. }
  47. }
  48. else
  49. {
  50. for(int i=x1;i<=x2;i++)
  51. ans[x][i][y1]='*';
  52. }
  53. }
  54. void draw(int x,int len)
  55. {
  56. int jian0=len>>;
  57. int jianer=len>>;
  58. int jianyi=len>>;
  59. draw1(x,,,,len-);
  60. draw1(x,,,len-,);
  61. draw1(x,,len-,len-,len-);
  62. draw1(x,len-,,len-,len-);
  63. //TS;
  64. draw1(x,jianer,jianer,jianer+jianyi-,jianer);
  65. draw1(x,jianer,jianer,jianer,jianer+jianyi-);
  66. draw1(x,jianer+jianyi,jianer,jianer+jianyi,jianer+jianyi-);
  67. draw1(x,jianer,jianer+jianyi-,jianer+jianyi,jianer+jianyi-);
  68. //TS;
  69. draw1(x,jianer,jianer+*jianyi-,jianer,jianer+*jianyi-);
  70. draw1(x,jianer,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
  71. draw1(x,jianer,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
  72. draw1(x,jianer+jianyi,jianer+*jianyi-,jianer+jianyi,jianer+*jianyi-);
  73. //TS;
  74. for(int i=len-;i>=jian0;i--)
  75. for(int j=jianyi+jian0-;j>=jianyi;j--)
  76. {
  77. ans[x][i][j]=ans[x-][len--i][jianyi+jian0--j];
  78. }
  79. //cout << x<<endl;
  80. }
  81. int main()
  82. {
  83. //freopen("in.txt", "r", stdin);
  84. //freopen("out.txt", "w", stdout);
  85. int n;
  86. init();
  87. //TS;
  88. for(int x=;x<=;x++)
  89. {
  90. draw(x,<<x);
  91. }
  92. while(scanf("%d",&n)==)
  93. {
  94. if(n<)
  95. break;
  96. int num=log2(n);
  97. for(int i=;i<n;i++)
  98. {
  99. for(int j=;j<n;j++)
  100. {
  101. printf("%c",ans[num][i][j]);
  102. }
  103. cout <<endl;
  104. }
  105. cout <<endl;
  106. }
  107. return ;
  108. }

E:先离散化 离散化 +模拟双端队列

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. using namespace std;
  5. struct Node{
  6. int c,p;
  7. bool operator<(const Node& rhs)const{
  8. if(c!=rhs.c) return c<rhs.c;
  9. return p<rhs.p;
  10. }
  11. }s[];
  12. int N,K;
  13. int cal(int st,int ed){
  14. int k=,sum=,ret=;
  15. for(int p=st,q=st;q<=ed;){
  16. if(k<=K){
  17. sum++;
  18. ret=max(ret,sum);
  19. k+=s[q+].p-s[q].p-;
  20. q++;
  21. }else{
  22. sum--;
  23. k-=s[p+].p-s[p].p-;
  24. p++;
  25. }
  26. }
  27. return ret;
  28. }
  29. int main()
  30. {
  31. // freopen("data.in","r",stdin);
  32. while(scanf("%d%d",&N,&K)==){
  33. int i,j;
  34. for(i=;i<N;s[i].p=i++)
  35. scanf("%d",&s[i].c);
  36. sort(s,s+N);
  37. int ans=;
  38. for(i=;i<N;i=j+){
  39. int c=s[i].c;
  40. j=i;
  41. while(j+<N && s[j+].c==c) j++;
  42. ans=max(ans,cal(i,j));
  43. }
  44. printf("%d\n",ans);
  45. }
  46. return ;
  47. }

F:递推DP

1)用dp[i][j]表示源串第i次操作后,与目标串不同的位置有几个。

(2)对于dp[i][j],有j个位置与目标串不同,所以可以将j个位置中的t个位置变为与目标串相同,把其余n-j个位置中的m-t个位置变为与目标串不同,转移方程就是dp[i+1][j-t+m-t]+=dp[i][j]*C(t,j)*C(m-t,n-j)

(3)如果j+m>n,那么t就无法从0开始枚举了,所以此时t从(m-(n-j))开始(m次操作中有n-j次操作落在n-j个相同位置的里面,还有m-(n-j)次操作落在j个不同位置的里面)。

(4)初始条件就是用cnt统计源串和目标串有多少个位置不一样,dp[0][cnt]=1,通过dp把路径都找出来,那么答案就是dp[k][0]。

  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. typedef long long LL;
  5. const LL MOD=;
  6. LL dp[][],c[][];
  7. char s[],d[];
  8.  
  9. void _init(){
  10. c[][]=;
  11. for(int i=;i<=;i++){
  12. c[i][]=;
  13. for(int j=;j<=i;j++){
  14. c[i][j]=(c[i-][j-]+c[i-][j])%MOD;
  15. }
  16. }
  17. }
  18.  
  19. int main()
  20. {
  21. int n,k,m, i,j,t,x;
  22. _init();
  23. while(scanf("%d%d%d",&n,&k,&m)==){
  24. scanf("%s",s);
  25. scanf("%s",d);
  26. x=;
  27. for(i=;i<n;i++)
  28. if(s[i]!=d[i])x++;
  29. for(i=;i<=k;i++)
  30. for(j=;j<=n;j++)
  31. dp[i][j]=;
  32. dp[][x]=;
  33. for(i=;i<k;i++)//ith operation
  34. for(j=;j<=n;j++){//j different
  35. if(dp[i][j]==)continue;
  36. for(t=max(,m-(n-j));t<=j&&t<=m;t++)//j+m should no biger than n or at least (m-(n-j)) should be change
  37. dp[i+][j-t+m-t]=(dp[i+][j-t+m-t]+dp[i][j]*c[j][t]%MOD*c[n-j][m-t]%MOD)%MOD;
  38. }
  39. LL ans=dp[k][];
  40. printf("%lld\n",ans);
  41. }
  42. return ;
  43. }

G:给你一个完全/非完全二叉树求最小的宽度  首先肯定把根节点的两个叶子放在同一侧是最优的 然后让较宽的那一枝在最里面是最优的 以一个节点为例:如果只有一个枝就无限地延伸 ans[x]=ans[a[x][0]] 如果有两个枝的话 相同就宽度+1 不同就取最大的

  1. #include <bits/stdc++.h>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define foror(i,a,b) for(i=a;i<b;i++)
  6. #define foror2(i,a,b) for(i=a;i>b;i--)
  7. #define EPS 1.0e-8
  8. #define PI acos(-1.0)
  9. #define INF 3000000000
  10. #define MOD 1000000009
  11. #define mem(a,b) memset((a),b,sizeof(a))
  12. #define TS printf("!!!\n")
  13. #define lson o<<1, l, m
  14. #define rson o<<1|1, m+1, r
  15. //using ll = long long;
  16. //using ull= unsigned long long;
  17. //std::ios::sync_with_stdio(false);
  18. using namespace std;
  19. //priority_queue<int,vector<int>,greater<int>> que;
  20. vector<vector<int> >a();
  21. int ans[];
  22. void doit(int x)
  23. {
  24. if(a[x].size()==)
  25. {
  26. ans[x]=;
  27. }
  28. else if(a[x].size()==)
  29. {
  30. doit(a[x][]);
  31. ans[x]=ans[a[x][]];
  32. }
  33. else if(a[x].size()==)
  34. {
  35. doit(a[x][]);
  36. doit(a[x][]);
  37. if(ans[a[x][]]==ans[a[x][]])
  38. ans[x]=ans[a[x][]]+;
  39. else
  40. ans[x]=max(ans[a[x][]],ans[a[x][]]);
  41. }
  42. }
  43. int main()
  44. {
  45. //freopen("in.txt", "r", stdin);
  46. //freopen("out.txt", "w", stdout);
  47. int n;
  48. while(scanf("%d",&n)==)
  49. {
  50. mem(ans,);
  51. for(int i=;i<=n;i++)
  52. a[i].clear();
  53. for(int i=;i<=n-;i++)
  54. {
  55. int x;
  56. scanf("%d",&x);
  57. a[x].push_back(i+);
  58. }
  59. doit();
  60. /*for(int i=1;i<=n;i++)
  61. printf("%d ",ans[i]);
  62. cout << endl;*/
  63. cout << ans[]<<endl;
  64. }
  65. return ;
  66. }

H:几何

题目大意:给你一个三角形的内切圆半径跟外接圆半径,求解出符合条件的三角形,输出三角形的三条边的长度,如果没有符合条件的三角形,输出“NO Solution!”。

解题思路:这个题是SP,既是因为情况不唯一,而且还有精度的误差。

  首先能够想到的就是NO Solution!的情况,即当内切圆半径等于1/2外接圆半径时,此时内切圆最大,而三角形为等边三角形,如图。

  其次要解决的就是怎么构造三角形的问题,因为解不唯一,所以只要列举出一种解就OK,于是就很容易的想到构造等腰三角形,在最大与最小之间二分等腰三角形的底边长度,解三角形得到答案,如图。

  1. #define sqr(x) (x)*(x)
  2.  
  3. int main()
  4. {
  5. double r, R;
  6. while(~scanf("%lf%lf", &r, &R)){
  7. if(R < *r){
  8. printf("NO Solution!\n");
  9. continue;
  10. }
  11. double left = , right = sqrt(3.0)*R;
  12. while(right-left > eps){
  13. double mid = (left+right)/2.0;
  14. double t = sqrt(sqr(sqrt(sqr(R)-sqr(mid/2.0))+R)+sqr(mid/2.0));
  15. //printf("%lf\n", t);
  16. if(sqr(sqrt(sqr(r)+sqr(t-mid/2.0))+r) + sqr(mid/2.0) - sqr(t) < eps){
  17. right = mid;
  18. }
  19. else {
  20. left = mid;
  21. }
  22. }
  23.  
  24. double p = sqrt(sqr(sqrt(sqr(R)-sqr(left/2.0))+R)+sqr(left/2.0));
  25. printf("%.16lf %.16lf %.16lf\n", p, p, left);
  26. }
  27.  
  28. return ;
  29. }
  30.  
  31. /*Sample test*/
  32. /*
  33.  
  34. */
  35.  
  36. ZOJ

Summer training #2的更多相关文章

  1. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. 2016 Multi-University Training Contests

    2016 Multi-University Training Contest 1 2016 Multi-University Training Contest 2 2016 Multi-Univers ...

  3. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  6. The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C

    Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...

  7. 2012 Multi-University Training Contest 9 / hdu4389

    2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...

  8. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  9. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  10. 2016 Multi-University Training Contest 1

    8/11 2016 Multi-University Training Contest 1 官方题解 老年选手历险记 最小生成树+线性期望 A Abandoned country(BH) 题意: 1. ...

随机推荐

  1. 不同种类的PI膜及其特性

    一.PI膜种类及其特性 1.聚酰亚胺材料分类 聚酰亚胺材料可分为热塑性聚酰亚胺和热固性聚酰亚胺(包括双马来酰亚胺型和单体反应聚合型聚酰亚胺及各自改性产品)两大类 其中,热塑性聚酰亚胺材料一般采用两步法 ...

  2. lamp的动静分离部署

    一.lamp分离部署工作图 二.LAMP的安装与配置 1.环境准备 2.对 PHP 服务器进行部署 #以下为安装PHP及其依赖 [root@php ~ ]# .tar.gz -C /usr/src [ ...

  3. [转帖]intel发布会之前,漫谈CPU核心架构:CCX、Ring Bus、Mesh

    intel发布会之前,漫谈CPU核心架构:CCX.Ring Bus.Mesh https://baijiahao.baidu.com/s?id=1607585351741429318&wfr= ...

  4. SQL SERVER GETDATE() 函数

    定义: GETDATE() 函数从 SQL Server 返回当前的时间和日期. 语法: GETDATE() 返回值: datetime型数据 例:  声明:本文是本人查阅网上及书籍等各种资料,再加上 ...

  5. redis 持久化之 RDB & AOF

    Redis 持久化实现方式 快照对数据某一时间点的完整备份.例如Linux 快照备份.Redis RDB.MySQL Dump. 日志将数据的所有操作都记录到日志中,需要恢复时,将日志重新执行一次.M ...

  6. [POI2011]ROT-Tree Rotations 题解

    题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!: 首先你要会权值线段树和线段树合并. 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响. 因为这是前序遍历: ...

  7. Number of Containers ZOJ - 3175(数论题)

    Problem Description For two integers m and k, k is said to be a container of m if k is divisible by  ...

  8. 手动导入jar到本地mvn仓库

    <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId ...

  9. 解决github pages和github .md文件图片不显示

    博客园上传的图片,在github上无法显示. 在github项目下建立img文件夹,放上图片 两种方式 项目绝对路径 https://raw.githubusercontent.com/用户名/项目名 ...

  10. LeetCode 腾讯精选50题--最小栈

    题目很简单,实现一个最小栈,能够以线形的时间获取栈中元素的最小值 自己的思路如下: 利用数组,以及两个变量, last用于记录栈顶元素的位置,min用于记录栈中元素的最小值: 每一次push,都比较m ...