用小号做的div2

A:竟然看错了排序顺序。。。白白WA了两发

注意读入一整行(包括空格):getline(cin,st)    【gets也是资瓷的

  1. #include<iostream>
  2. using namespace std;
  3. string s[];
  4. int d[];
  5. int T,N;
  6.  
  7. void qsort(int l,int r)
  8. {
  9. int i=l,j=r;
  10. int m=(l+r)/;
  11. int mid=d[m];
  12. while(i<j)
  13. {
  14. while(d[i]<mid) i++;
  15. while(d[j]>mid) j--;
  16. if(i<=j)
  17. {
  18. int tmp=d[i];
  19. d[i]=d[j];
  20. d[j]=tmp;
  21. string ts=s[i];
  22. s[i]=s[j];
  23. s[j]=ts;
  24. i++;
  25. j--;
  26. }
  27. }
  28. if(l<j) qsort(l,j);
  29. if(i<r) qsort(i,r);
  30. }
  31.  
  32. int main()
  33. {
  34. string st;
  35. cin>>T;
  36. while(T--)
  37. {
  38. cin>>N;
  39. for(int i=;i<=N;i++)
  40. {
  41. getline(cin,st);
  42. //cin>>s[i]>>d[i];
  43. int tl=st.length();
  44. int la=st[tl-]-'';
  45. int lb=st[tl-]-'';
  46. int lc=st[tl-]-'';
  47. int ld=st[tl-]-'';
  48. d[i]=ld*+lc*+lb*+la;
  49. //cout<<i<<" "<<d[i]<<endl;
  50. s[i]=st;
  51. }
  52.  
  53. qsort(,N);
  54. for(int i=N;i>=;i--)
  55. {
  56. //cout<<s[i]<<endl;
  57. int tl=s[i].length();
  58. string tms=s[i];
  59. for(int j=;j<=tl-;j++)
  60. cout<<tms[j];
  61. cout<<endl;
  62. }
  63. }
  64. }

B:自己YY的方法

其实就是找乘积的最小非质数因子

先判断无解的情况:所有数都是1 or 只有一个非1的数且是质数,剩下的都是1

若有解:对每个a[i]都分解质因子,找出每个a[i]最小的和第二小的质因子

然后把所有的质因子们放一起排序,取最小的两个相乘既是解。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<ctime>
  5. using namespace std;
  6. #define LL long long
  7. int T,N;
  8. LL a[];
  9. LL sm[];
  10.  
  11. //**********************************************
  12. // pollard_rho算法进行质因素分解
  13. //*********************************************
  14. long long factor[];//质因素分解结果(刚返回时是无序的)
  15. //注意factor里是每个质因数。比如N=8,那么factor[0..2]={2,2,2} (2^3=8)
  16. int tol;//质因素的个数,编号0~tol-1
  17.  
  18. const int S = ; //随机算法判定次数,一般8~10就够了
  19. //计算ret = (a*b)%c
  20. long long mult_mod(long long a,long long b,long long c)
  21. {
  22. a %= c;
  23. b %= c;
  24. long long ret = ;
  25. long long tmp = a;
  26. while(b)
  27. {
  28. if(b & )
  29. {
  30. ret += tmp;
  31. if(ret > c)ret -= c;//直接取模慢很多
  32. }
  33. tmp <<= ;
  34. if(tmp > c)tmp -= c;
  35. b >>= ;
  36. }
  37. return ret;
  38. }
  39. //计算 ret = (a^n)%mod
  40. long long pow_mod(long long a,long long n,long long mod)
  41. {
  42. long long ret = ;
  43. long long temp = a%mod;
  44. while(n)
  45. {
  46. if(n & )ret = mult_mod(ret,temp,mod);
  47. temp = mult_mod(temp,temp,mod);
  48. n >>= ;
  49. }
  50. return ret;
  51. }
  52. //通过 a^(n-1)=1(mod n)来判断n是不是素数
  53. // n-1 = x*2^t中间使用二次判断
  54. //是合数返回true,不一定是合数返回false
  55. bool check(long long a,long long n,long long x,long long t)
  56. {
  57. long long ret = pow_mod(a,x,n);
  58. long long last = ret;
  59. for(int i = ; i <= t; i++)
  60. {
  61. ret = mult_mod(ret,ret,n);
  62. if(ret == && last != && last != n-)return true;//合数
  63. last = ret;
  64. }
  65. if(ret != )return true;
  66. else return false;
  67. }
  68. //**************************************************
  69. bool Miller_Rabin(long long n)
  70. //是素数返回true,(可能是伪素数)
  71. //不是素数返回false
  72. {
  73. if(n==) return true;
  74. if( n < )return false;
  75. if( n == )return true;
  76. if( (n&) == )return false;//偶数
  77. long long x = n - ;
  78. long long t = ;
  79. while( (x&)== )
  80. {
  81. x >>= ;
  82. t++;
  83. }
  84. rand();/* *************** */
  85. for(int i = ; i < S; i++)
  86. {
  87. long long a = rand()%(n-) + ;
  88. if( check(a,n,x,t) )
  89. return false;
  90. }
  91. return true;
  92. }
  93.  
  94. long long gcd(long long a,long long b)
  95. {
  96. long long t;
  97. while(b)
  98. {
  99. t = a;
  100. a = b;
  101. b = t%b;
  102. }
  103. if(a >= )return a;
  104. else return -a;
  105. }
  106. //出一个因子
  107. long long pollard_rho(long long x,long long c)
  108. {
  109. long long i = , k = ;
  110. srand(time(NULL));
  111. long long x0 = rand()%(x-) + ;
  112. long long y = x0;
  113. while()
  114. {
  115. i ++;
  116. x0 = (mult_mod(x0,x0,x) + c)%x;
  117. long long d = gcd(y - x0,x);
  118. if( d != && d != x)return d;
  119. if(y == x0)return x;
  120. if(i == k)
  121. {
  122. y = x0;
  123. k += k;
  124. }
  125. }
  126. }
  127. //对 n进行素因子分解,存入factor. k设置为107左右即可
  128. void findfac(long long n,int k)
  129. {
  130. if(n == )return;
  131. if(Miller_Rabin(n))
  132. {
  133. factor[tol++] = n;
  134. return;
  135. }
  136. long long p = n;
  137. int c = k;
  138. while( p >= n)
  139. p = pollard_rho(p,c--);//值变化,防止死循环k
  140. findfac(p,k);
  141. findfac(n/p,k);
  142. }
  143.  
  144. int main()
  145. {
  146. cin>>T;
  147. while(T--)
  148. {
  149. cin>>N;
  150. int acc=,occ=;
  151. for(int i=;i<=N;i++)
  152. {
  153. cin>>a[i];
  154. if(Miller_Rabin(a[i])) acc++;
  155. if(a[i]==) occ++;
  156. }
  157. if(((occ==N-)&&(acc==))||(occ==N))
  158. cout<<"-1"<<endl;
  159. else
  160. {
  161. int tot=;
  162. for(int i=;i<=N;i++)
  163. {
  164. tol = ;
  165. memset(factor,,sizeof(factor));
  166. findfac(a[i],);
  167. //此时factor[0..tol-1]存放的就是所有质因数(无序)
  168. sort(factor,factor+tol);
  169. //cout<<a[i]<<" "<<tol<<endl;
  170. //cout<<factor[0]<<factor[1]<<factor[2]<<endl;
  171. if(factor[]!=)
  172. {
  173. tot++;
  174. sm[tot]=factor[];
  175. }
  176. if(factor[]!=)
  177. {
  178. tot++;
  179. sm[tot]=factor[];
  180. }
  181. }
  182. sort(sm+,sm+tot+);
  183. cout<<sm[]*sm[]<<endl;
  184. }
  185.  
  186. }
  187. }

bc#54 div2的更多相关文章

  1. BC 52 div2 A Victor and Machine

    简单数学题,把这道题目贴上去的不过为了不想看到这个月写了某个数字篇博客,该数字有点不吉利... 近期没有学习的欲望.. . 集中不了注意力,今天打BC还是做出来一题,尽管涨分了,真心希望能接近cf的水 ...

  2. linux BC命令行计算器

    1. 基本使用: $ bc <<< 5*4 20 $ bc <<< 5+4 9 $ bc <<< 5-4 1 或者 $ echo "5* ...

  3. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  4. es6的let,const

    1.es6 新增的let const 命令 let用来定义一个局部变量,故名思意就是只在当前代码块可用 1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 ...

  5. RSA简介

    RSA概述 首先看这个加密算法的命名.很有意思,它其实是三个人的名字.早在1977年由麻省理工学院的三位数学家Rivest.Shamir 和 Adleman一起提出了这个加密算法,并且用他们三个人姓氏 ...

  6. linux下Tomcat+OpenSSL配置单向&双向认证(自制证书)

    背景 由于ios将在2017年1月1日起强制实施ATS安全策略,所有通讯必须使用https传输,本文只针对自制证书,但目前尚不确定自制证书是否能通过appstore审核. 1.必须支持传输层安全(TL ...

  7. TLS握手

    http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1 ...

  8. BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

    第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义 任意边小于其余三边之和 换句话说就是 最长边小于其余三边之和 这样的话问题转化为 ...

  9. 一场BC的台前幕后

    #define BC BestCoder 一场BC的台前幕后 起源大概是这种:一个月前的BC#75结束后,AK的人非常多,于是CodeVS群里非常多人吐槽BC#75的质量,这时YJQ对KPM说:&qu ...

随机推荐

  1. Java打印九九乘法表

    package com.czgo; /** * 九九乘法表 * * @author AlanLee * */ public class Print99 { public static void mai ...

  2. Android 面试题及答案(2)

    1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent-> ...

  3. ant+findbugs 扫描代码生成报告

    1. 下载安装ant.findbugs 下载ant.findbugs最新压缩包解压到本地磁盘合适位置,比如: D:\Program Files\apache-ant-1.9.7 D:\Program ...

  4. 欢迎进入MyKTV点歌系统展示

    一个项目,一分收获:一个项目,一些资源.Ktv项目也是一样的,所以我想分享我的收获,让你们获得你需要的资源. 一. 那MyKTV点歌系统具体的功能有哪些呢?我们就来看看吧! 1.MyKTV前台功能: ...

  5. SQL SERVER导出特殊格式的平面文件

    有时候我们需要将SQL SERVER的数据一次性导入到ORACLE中,对于数据量大的表.我一般习惯先从SQL SERVER导出特殊格式的平面文件(CSV或TXT),然后用SQL*Loader装载数据到 ...

  6. MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

    回到目录 递归递归我爱你!只要你想做,就一定能成功! 从一到二,从二到三,它是容易的,也是没什么可搞的,或者说,它是一种流水线的方式,而从三到十,从十到百,它注定要有一个质的突破,否则,它会把你累死, ...

  7. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  8. 002.php安装(lnmp)

    搭建lnmp环境时,需要先安装mysql,再安装php,而nginx安装顺序无所谓,nginx与php之间的联系需要手动配置 一.php下载和配置“安装环境“ [root@huh ~]# cd /us ...

  9. localhost与127.0.0.1的区别

    localhost与127.0.0.1的区别是什么 定义 localhost也叫local ,正确的解释是:本地服务 127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) 不同 ...

  10. RPM包制作教程

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...