2016 round A

A. Googol String

small && large

  1. LL a[];
  2. int dfs(LL pos, int id, bool f)
  3. {
  4. if(pos== || pos==a[id-]+)
  5. return f? :;
  6. if(pos>a[id-])
  7. return dfs(a[id]-pos+, id-, f^);
  8. else
  9. return dfs(pos, id-, f);
  10. }
  11. int main()
  12. {
  13. freopen("A-small-practice.in", "r", stdin);
  14. freopen("A.out", "w", stdout);
  15. a[]=;
  16. for(int i=;i<=;i++)
  17. a[i]=a[i-]*+;
  18. int t, ca=;
  19. scanf("%d", &t);
  20. while(t--)
  21. {
  22. LL n;
  23. scanf("%I64d", &n);
  24. int pos=lower_bound(a, a+, n)-a;
  25. printf("Case #%d: %d\n", ca++, dfs(n, pos, ));
  26. }
  27. return ;
  28. }

B. gCube

n个数,m个询问

每个询问给[l, r]

求 $\sqrt[^{r-l+1}]{\prod\limits_{i=l}^{r}a_i}$

smal

暴力二分,large TLE了 跑10min都没跑完,应该是大数乘太费时间

  1. public class Main
  2. {
  3. static BigDecimal quick(BigDecimal a, BigInteger b)
  4. {
  5. BigDecimal ans=BigDecimal.ONE;
  6. while(b.compareTo(BigInteger.ZERO)!=0)
  7. {
  8. if(b.mod(BigInteger.valueOf(2)).compareTo(BigInteger.ZERO)!=0)
  9. ans=ans.multiply(a);
  10. b=b.divide(BigInteger.valueOf(2));
  11. a=a.multiply(a);
  12. }
  13. return ans;
  14. }
  15. static BigDecimal sqrt(BigDecimal x, int n)
  16. {
  17. BigDecimal l=BigDecimal.ZERO, r=x;
  18. while(r.subtract(l).abs().compareTo(BigDecimal.valueOf(1e-10))>0)
  19. {
  20. BigDecimal m=(l.add(r)).divide(BigDecimal.valueOf(2));
  21. BigDecimal cur=quick(m, BigInteger.valueOf(n));
  22. cur=cur.subtract(x);
  23. if(cur.abs().compareTo(BigDecimal.valueOf(1e-10))<0)
  24. return m;
  25. else if(cur.compareTo(BigDecimal.ZERO)<0)
  26. l=m;
  27. else
  28. r=m;
  29. }
  30. return l;
  31. }
  32. public static void main(String[] args) throws FileNotFoundException
  33. {
  34. // InputReader in=new InputReader();
  35. // PrintWriter out=new PrintWriter(System.out);
  36. Scanner in=new Scanner(new File("B-large-practice.in"));
  37. PrintWriter out = new PrintWriter(new File("B.out"));
  38. int t=in.nextInt();
  39. int ca=1;
  40. while((t--)!=0)
  41. {
  42. int n=in.nextInt();
  43. int m=in.nextInt();
  44. int []a=new int[n];
  45. for(int i=0;i<n;i++)
  46. a[i]=in.nextInt();
  47. BigDecimal []b=new BigDecimal[n];
  48. b[0]=BigDecimal.valueOf(a[0]);
  49. for(int i=1;i<n;i++)
  50. b[i]=b[i-1].multiply(BigDecimal.valueOf(a[i]));
  51. out.println("Case #"+ca+":");ca++;
  52. while((m--)!=0)
  53. {
  54. int l=in.nextInt();
  55. int r=in.nextInt();
  56. BigDecimal pre=BigDecimal.ONE;
  57. if(l!=0) pre=b[l-1];
  58. BigDecimal s=b[r].divide(pre);
  59. out.printf("%.9f", sqrt(s, r-l+1));
  60. out.println("");
  61. }
  62. }
  63. out.close();
  64. }
  65. }

large

求n次根号下的就是把ans除n次刚好除完

那就for l 到 r 每次都除一个ans 最后与1比较 判断是否除完就行了

  1. const LD eps=1e-10; // eps<1e9了要long double!!!
  2.  
  3. int a[1005];
  4. LD sqrtn(int x, int y)
  5. {
  6. LD l=1, r=a[y];
  7. for(int i=x;i<=y;i++) // 数列不递增!!注意取最大值!
  8. r=max(r, (LD)a[i]);
  9. while(fabs(l-r)>eps)
  10. {
  11. LD mid=(l+r)/2.0;
  12. LD cur=1.0;
  13. for(int i=x;i<=y;i++)
  14. cur*=a[i]/mid;
        // 要注意这里不能fabs(cur-1)<eps了就结束 因为cur与1<eps了 不代表mid与ans的误差也小于eps了!!
  15. if(cur>1)
  16. l=mid;
  17. else
  18. r=mid;
  19. }
  20. return l;
  21. }
  22. int main()
  23. {
  24. freopen("B-large-practice.in", "r", stdin);
  25. freopen("B.out", "w", stdout);
  26. int t, ca=1;
  27. scanf("%d", &t);
  28. while(t--)
  29. {
  30. int n, m;
  31. scanf("%d%d", &n, &m);
  32. for(int i=0;i<n;i++)
  33. scanf("%d", &a[i]);
  34. printf("Case #%d:\n", ca++);
  35. while(m--)
  36. {
  37. int l, r;
  38. scanf("%d%d", &l, &r);
  39. printf("%.9Lf\n", sqrtn(l, r));
  40. }
  41. }
  42. return 0;
  43. }

2017 round A

A. Country Leader

给n个字符串 输出其中字母最多的字符串 字母一样多 输出字典序最小

神tm 空格only appear in Large!! 挂了A large真是日了狗的心情

  1. char s[];
  2. bool vis[];
  3. int main()
  4. {
  5. freopen("A-large-practice.in", "r", stdin);
  6. freopen("A.out", "w", stdout);
  7. int t, ca=;
  8. scanf("%d", &t);
  9. while(t--)
  10. {
  11. printf("Case #%d: ", ca++);
  12. int n;
  13. scanf("%d", &n);
  14. getchar();
  15. string ans="";
  16. int maxn=;
  17. for(int i=;i<n;i++)
  18. {
  19. gets(s);
  20. string ss=s;
  21. memset(vis, , sizeof(vis));
  22. int num=;
  23. int len=strlen(s);
  24. for(int j=;j<len;j++)
  25. if(s[j]!=' ' && !vis[s[j]])
  26. num++, vis[s[j]]=;
  27. if(num>maxn)
  28. maxn=num, ans=s;
  29. else if(num==maxn)
  30. if(ss<ans)
  31. ans=ss;
  32. }
  33. cout<<ans<<endl;
  34. }
  35. return ;
  36. }

A

B. Rain

给n*m的方格,每个格子有高度,水满了会增加格子高度,输出增加的高度

每个格子会变成 上下左右 比它高的 最小高度

从最小的高度开始 看每格能否合法的变成这个高度

  1. vector<int> v;
  2. int mp[][];
  3. bool vis[][];
  4. int ans, n, m;
  5. bool can(int x, int y, int val)
  6. {
  7. // int num=0;
  8. if(!vis[x][y] && mp[x][y]==val)
  9. {
  10. if(x== || x==n- || y== || y==m-)
  11. return false;
  12. vis[x][y]=;
  13. // num=1;
  14. if(x>){
  15. if(!can(x-, y, val)) return false;}
  16. if(x<n-){
  17. if(!can(x+, y, val)) return false;}
  18. if(y>){
  19. if(!can(x, y-, val)) return false;}
  20. if(y<m-){
  21. if(!can(x, y+, val)) return false;}
  22. }
  23. else if(mp[x][y]<val)
  24. return false;
  25. return true;
  26. }
  27. void dfs(int x, int y, int num)
  28. {
  29. for(int i=;i<n;i++)
  30. for(int j=;j<m;j++)
  31. if(vis[i][j])
  32. ans+=num-mp[i][j], mp[i][j]=num, vis[i][j]=;
  33. }
  34. int main()
  35. {
  36. freopen("B-large.in", "r", stdin);
  37. freopen("B.out", "w", stdout);
  38. int t, ca=;
  39. scanf("%d", &t);
  40. while(t--)
  41. {
  42. printf("Case #%d: ", ca++);
  43. scanf("%d%d", &n, &m);
  44. v.clear();
  45. for(int i=;i<n;i++)
  46. for(int j=;j<m;j++)
  47. scanf("%d", &mp[i][j]), v.push_back(mp[i][j]);
  48. sort(v.begin(), v.end());
  49. int d=unique(v.begin(), v.end())-v.begin();
  50. if(d<)
  51. {
  52. puts("");
  53. continue;
  54. }
  55. ans=;
  56. for(int ii=;ii<d;ii++)
  57. {
  58. for(int i=;i<n;i++)
  59. {
  60. for(int j=;j<m;j++)
  61. {
  62. memset(vis, , sizeof(vis));
  63. if(mp[i][j]<v[ii] && can(i, j, mp[i][j]))
  64. {
  65. dfs(i, j, v[ii]);
  66. }
  67. }
  68. }
  69. }
  70. // for(int i=0;i<n;i++){
  71. // for(int j=0;j<m;j++)
  72. // printf("%d ", mp[i][j]);puts("");}
  73. printf("%d\n", ans);
  74. }
  75. return ;
  76. }

B

C. Jane's Flower Shop

给n个系数 求一元n次方程在-1到1之间的那个解,题目保证有且仅有一解

因为保证有且仅有一解,因此Left和Right两端一定为一正一负

根据正负二分就行

  1. typedef long double LD;
  2. const LD eps=1e-;
  3.  
  4. int a[];
  5. int n;
  6. LD cal(LD r)
  7. {
  8. LD cur=, ans=;
  9. for(int i=;i<=n;i++, cur*=(+r))
  10. ans+=a[n-i]*cur;
  11. return ans;
  12. }
  13. int main()
  14. {
  15. freopen("C-large.in", "r", stdin);
  16. freopen("C.out", "w", stdout);
  17. int t, ca=;
  18. scanf("%d", &t);
  19. while(t--)
  20. {
  21. printf("Case #%d: ", ca++);
  22. scanf("%d", &n);
  23. for(int i=;i<=n;i++)
  24. scanf("%d", &a[i]);
  25. a[]=-a[];
  26. LD l=-, r=;
  27. LD ll=cal(l), rr=cal(r);
  28. while(fabs(l-r)>eps)
  29. {
  30. LD m=(r+l)*0.5;
  31. LD mm=cal(m);
  32. if(mm< && ll<)
  33. l=m;
  34. else if(mm< && rr<)
  35. r=m;
  36. else if(mm> && ll>)
  37. l=m;
  38. else if(mm> && rr>)
  39. r=m;
  40. else
  41. l=m;
  42. }
  43. printf("%.12Lf\n", l);
  44. }
  45. return ;
  46. }

C

APAC Practice的更多相关文章

  1. Pramp mock interview (4th practice): Matrix Spiral Print

    March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...

  2. Atitit 数据存储视图的最佳实际best practice attilax总结

    Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论  本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...

  3. The Practice of .NET Cross-Platforms

    0x01 Preface This post is mainly to share the technologies on my practice about the .NET Cross-Platf ...

  4. Exercise 24: More Practice

    puts "Let's practice everything." puts 'You\'d need to know \'bout escapes with \\ that do ...

  5. ConCurrent in Practice小记 (3)

    ConCurrent in Practice小记 (3) 高级同步技巧 Semaphore Semaphore信号量,据说是Dijkstra大神发明的.内部维护一个许可集(Permits Set),用 ...

  6. ConCurrent in Practice小记 (2)

    Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0 ...

  7. ConCurrent in Practice小记 (1)

    ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局 ...

  8. 1.2 基础知识——关于猪皮(GP,Generic Practice)

    摘要: 这是<CMMI快乐之旅>系列文章之一.说起猪皮(GP,Generic Practice),真的让人又爱又恨,中文翻译叫通用实践.CMMI标准中每个级别包含几个PA,每个PA又包含几 ...

  9. 2015年第2本(英文第1本):《The Practice of Programming》

    2015年计划透析10本英文原著,最开始选定的第一本英文书是<Who Moved my Cheese>,可是这本书实在是太短.太简单了,总体的意思就是要顺应变化,要跳出自己的舒适区,全文不 ...

随机推荐

  1. Linux命令行提示符设置

    我们使用Linux系统时接触最多的是它的命令行窗口,很多时候我们都需要在命令行上输入命令,在输入的命令前都会有提示符,一般系统默认的提示符形式是:[username@host 工作目录]$. 其实,我 ...

  2. 清空系统日志shell scripts——自学笔记

    这是一个清空系统日志的脚本: vim logmess_clean.sh #bin/bash        //该脚本所使用的shell解释器 cd /var/log/  //切换到存放日志目录 ech ...

  3. Linux时间相关函数

    相关文件: /etc/localtime  本地时间二级制文件 /etc/sysconfig/clock  时区配置文件 /usr/share/zoneinfo  存储各个时区的二进制文件 时间修改方 ...

  4. Lucene 4.0

    关于4.0的Update Index  ,Create Index /* * Create Index */ public static void createIndex() throws IOExc ...

  5. jexus 配置 学习

    http://www.linuxdot.net/ 1.禁止或允许某IP或IP段访问网站 A.只允许某些IP地址访问网站(白名单功能) 默认情况下,允许所有IP地址访问.如果手工设置IP地址白名单, 那 ...

  6. php header函数实例代码

    一个完美的演示PHP header()函数用法的完整代码. 其中介绍的refresh方法,比<META ……用起来更得心应手,应该是段不错的代码. <?php  /*** Function ...

  7. WinFrom下连接字符串的数据库文件路径问题

    一直以为连接字符串中的系统变量|DataDirectory|就是在ASP.NET中代替App_Data的绝对路径.原来在WinForm程序中也能用|DataDirectory|,不过指代的是exe文件 ...

  8. SQL中的模糊查询

    写个标题先.先来一篇大神的文章:http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html 练习代码如下: 1.百分号:%   表示任 ...

  9. linux c 分解质因数

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> ...

  10. RaddioButton控件

    <GroupBox Margin="5"> <StackPanel> <RadioButton IsChecked="true"& ...