2018.3.27 Test

时间:8:00~11:30

期望得分:100+60+25=185

实际得分:100+40+25=165

这篇基本啥东西没写→_→

T1

  1. //位数和只有[0,72]这73种情况,a次方后也是只有73种情况,枚举后得出x算一下是否满足即可。
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <algorithm>
  5. #define gc() getchar()
  6. typedef long long LL;
  7. const int N=75,LIM=1e9;
  8. int a,K,Ans[666666];
  9. LL b,c,w[76][7];
  10. inline int read()
  11. {
  12. int now=0,f=1;register char c=gc();
  13. for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
  14. for(;isdigit(c);now=now*10+c-'0',c=gc());
  15. return now*f;
  16. }
  17. void Pre()
  18. {
  19. for(int i=1; i<=73; ++i)
  20. {
  21. LL tmp=i;
  22. for(int j=1; j<=5; ++j,tmp*=i) w[i][j]=tmp;
  23. }
  24. }
  25. int main()
  26. {
  27. freopen("safe.in","r",stdin);
  28. freopen("safe.out","w",stdout);
  29. Pre();
  30. int T=read();
  31. while(T--)
  32. {
  33. a=read(),b=read(),c=read(),K=read(),Ans[0]=0;
  34. for(int i=0; i<=73; ++i)
  35. {
  36. LL tmp=(LL)(w[i][a]*b+c);
  37. if(tmp>K) break;
  38. int res=0,ans=(int)tmp;
  39. for(; tmp; tmp/=10) res+=tmp%10;
  40. if(res==i) Ans[++Ans[0]]=ans;
  41. }
  42. printf("%d\n",Ans[0]);
  43. if(Ans[0]) for(int i=1; i<=Ans[0]; ++i) printf("%d ",Ans[i]);
  44. else printf("-1");
  45. putchar('\n');
  46. }
  47. return 0;
  48. }

T2

  1. woc标程T2.T35.6k,也没题解,不改了。

T3


考试代码

T2

高斯消元爆精度怎么破。。60分都没拿到当时没学辗转相除的高斯消元。。

打表发现10~15一小段内答案是成倍增长的(确实只有几个数有规律。。精度差太大吧),然后,也没什么了。。

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #define mod (1000000007)
  5. typedef long long LL;
  6. const int N=205;
  7. const double eps=1e-9;
  8. const LL delta[7]={1,1,13,13,12,11};
  9. double mat[N][N];
  10. LL n,K;
  11. double Gauss()
  12. {
  13. for(int j=1; j<n; ++j)
  14. {
  15. int mxrow=j;
  16. for(int i=j; i<n; ++i)
  17. if(fabs(mat[i][j])>fabs(mat[mxrow][j])) mxrow=i;
  18. if(!mat[mxrow][j]) return 0;
  19. if(mxrow!=j) std::swap(mat[mxrow],mat[j]);
  20. for(int i=j+1; i<n; ++i)
  21. if(mat[i][j])
  22. {
  23. double t=mat[i][j]/mat[j][j];
  24. for(int k=j; k<n; ++k)
  25. mat[i][k]-=t*mat[j][k];
  26. }
  27. }
  28. double res=1.0;
  29. for(int i=1; i<n; ++i) res*=mat[i][i];
  30. return fabs(res);
  31. }
  32. void P()
  33. {
  34. for(int i=0; i<n; ++i,putchar('\n'))
  35. for(int j=0; j<n; ++j) printf("%.0lf ",mat[i][j]);
  36. putchar('\n');
  37. }
  38. void Matrix(bool f)
  39. {
  40. for(int i=0; i<n; ++i)
  41. for(int j=0; j<n; ++j) mat[i][j]=0;
  42. for(int i=0; i<K; ++i) mat[i][i]=i+std::min(K,n-i-1);
  43. for(int i=K; i<n; ++i) mat[i][i]=K+std::min(K,n-i-1);
  44. for(int i=0; i<n; ++i)
  45. for(int j=i+1; j<=std::min(n,i+K); ++j)
  46. --mat[i][j], --mat[j][i];
  47. // P();
  48. if(f) printf("%I64d",((LL)Gauss())%mod);
  49. }
  50. double FP(double x,LL k)
  51. {
  52. double t=1.0;
  53. for(; k; k>>=1,x=x*x)
  54. if(k&1) t=t*x;
  55. return t;
  56. }
  57. //LL Calc(LL b,LL a,LL n){
  58. // return FP(b*FP(a,mod-2)%mod,n);
  59. //}
  60. int main()
  61. {
  62. freopen("like.in","r",stdin);
  63. freopen("like.out","w",stdout);
  64. scanf("%I64d%I64d",&n,&K);
  65. if(K==1) {putchar('1'); return 0;}
  66. if(n<=200) {Matrix(1); return 0;}
  67. LL tmp=n;
  68. n=delta[K]-1, Matrix(0);
  69. double a=Gauss();
  70. ++n, Matrix(0);
  71. double b=Gauss();
  72. printf("%I64d",((LL)(b*FP(b/a,tmp-n)))%mod);
  73. // printf("%.0lf",((LL)(FP(b,tmp-n)*FP(FP(a,tmp-n),mod-2)))%mod);
  74. // LL a=((LL)Gauss())%mod;
  75. // LL b=((LL)Gauss())%mod;
  76. // printf("%I64d",b*Calc(b,a,tmp-n)%mod);//还是脱不了实数快速幂。。
  77. return 0;
  78. }

打表程序:

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #define mod (1000000007)
  5. typedef long long LL;
  6. const int N=105;
  7. const double eps=1e-9;
  8. double mat[N][N];
  9. LL n,K;
  10. double Gauss()
  11. {
  12. for(int j=1; j<n; ++j)
  13. {
  14. int mxrow=j;
  15. for(int i=j; i<n; ++i)
  16. if(fabs(mat[i][j])>fabs(mat[mxrow][j])) mxrow=i;
  17. if(!mat[mxrow][j]) return 0;
  18. if(mxrow!=j) std::swap(mat[mxrow],mat[j]);
  19. for(int i=j+1; i<n; ++i)
  20. if(mat[i][j])
  21. {
  22. double t=mat[i][j]/mat[j][j];
  23. for(int k=j; k<n; ++k)
  24. mat[i][k]-=t*mat[j][k];
  25. }
  26. }
  27. double res=1.0;
  28. for(int i=1; i<n; ++i) res*=mat[i][i];
  29. return fabs(res);
  30. }
  31. void P()
  32. {
  33. for(int i=0; i<n; ++i,putchar('\n'))
  34. for(int j=0; j<n; ++j) printf("%.0lf ",mat[i][j]);
  35. putchar('\n');
  36. }
  37. int gcd(int x,int y){
  38. return y?gcd(y,x%y):x;
  39. }
  40. int main()
  41. {
  42. // freopen("like.in","r",stdin);
  43. freopen("table2.out","w",stdout);
  44. K=2;
  45. double pre=1,ans;
  46. int g;
  47. for(n=3; n<=50; ++n)
  48. {
  49. for(int i=0; i<n; ++i)
  50. for(int j=0; j<n; ++j) mat[i][j]=0;
  51. for(int i=0; i<K; ++i) mat[i][i]=i+std::min(K,n-i-1);
  52. for(int i=K; i<n; ++i) mat[i][i]=K+std::min(K,n-i-1);
  53. for(int i=0; i<n; ++i)
  54. for(int j=i+1; j<=std::min(n,i+K); ++j)
  55. --mat[i][j], --mat[j][i];
  56. // P();
  57. printf("f[%I64d][%I64d] = %.0lf\n",n,K,ans=((LL)Gauss())%mod);
  58. g=gcd((int)ans,(int)pre);
  59. printf("Rate:%.0lf/%.0lf = %.3lf\t%.0lf/%.0lf = %.3lf = %d/%d\n",pre,ans,pre/ans,ans,pre,ans/pre,(int)ans/g,(int)pre/g);
  60. pre=ans;
  61. }
  62. return 0;
  63. }

T3

以为10^9用bitset说不定能水过去,果然高估机房电脑了233。

cena实测bitset比bool数组慢很多!bool[][]5.6s能跑过1000,bitset10s过不去。。(不过相比也是编译器辣鸡的锅)

  1. #include <cstdio>
  2. #include <cctype>
  3. #include <bitset>
  4. #include <algorithm>
  5. #define rgint register int
  6. #define gc() getchar()
  7. //#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  8. typedef long long LL;
  9. const int N=1005,MAXIN=5e5;
  10. int n,mod,R,Enum,H[N],to[N<<1],nxt[N<<1],dis[N][N],tmp[N];
  11. LL K,A[N];
  12. std::bitset<N> f[N];
  13. //bool f[N][N];
  14. //char IN[MAXIN],*SS=IN,*TT=IN;
  15. inline int read()
  16. {
  17. int now=0;register char c=gc();
  18. for(;!isdigit(c);c=gc());
  19. for(;isdigit(c);now=now*10+c-'0',c=gc());
  20. return now;
  21. }
  22. inline void AddEdge(int u,int v)
  23. {
  24. to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
  25. to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
  26. }
  27. void DFS(int x,int f,int anc,LL sum)
  28. {
  29. dis[x][anc]=sum;
  30. for(int i=H[x]; i; i=nxt[i])
  31. if(to[i]!=f) DFS(to[i],x,anc,(sum*K+A[to[i]])%mod);
  32. }
  33. int main()
  34. {
  35. freopen("gbxf.in","r",stdin);
  36. freopen("gbxf.out","w",stdout);
  37. n=read(),mod=read(),K=read(),R=read();
  38. for(int i=1; i<=n; ++i) A[i]=read();
  39. for(int u,v,i=1; i<n; ++i) u=read(),v=read(),AddEdge(u,v);
  40. for(int i=1; i<=n; ++i) DFS(i,i,i,A[i]);
  41. for(rgint i=1; i<=n; ++i)
  42. for(rgint j=1; j<=n; ++j) f[i]|=((dis[i][j]==R)<<j);
  43. LL res=0;
  44. for(rgint cnt,i=1; i<=n; ++i)//p1
  45. {
  46. cnt=0;
  47. for(int j=1; j<=n; ++j)
  48. if(!f[i][j]) tmp[++cnt]=j;
  49. for(rgint j=1; j<=cnt; ++j)
  50. for(int k=1; k<=cnt; ++k)
  51. if(!f[tmp[j]][tmp[k]]) ++res;
  52. cnt=0;
  53. for(int j=1; j<=n; ++j)
  54. if(f[i][j]) tmp[++cnt]=j;
  55. for(rgint j=1; j<=cnt; ++j)
  56. for(int k=1; k<=cnt; ++k)
  57. if(f[tmp[j]][tmp[k]]) ++res;
  58. }
  59. printf("%I64d",res);
  60. return 0;
  61. }

清北学堂省选刷题冲刺班 Test Day3的更多相关文章

  1. 清北 Noip 2016 考前刷题冲刺济南班

    2016 10 29 周六 第一天 %%%,%ZHX大神 上午,60分, 下午,爆零orz 2016 10 30 周天 第二天 炒鸡倒霉的一天 %%%,%ZHX大神 据大神第一天的题最简单. 上午,和 ...

  2. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  3. 2017-10-6 清北刷题冲刺班p.m

    1.数组异或 #include<iostream> #include<cstdio> #define maxn 100010 #define mod 1000000007 us ...

  4. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  5. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  6. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  7. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  8. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  9. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

随机推荐

  1. Spring Boot 1.4 单元测试

    在1.3中单元测试这样子的类似代码: // SpringJUnit支持,由此引入Spring-Test框架支持! @RunWith(SpringJUnit4ClassRunner.class) // ...

  2. HDU 3511 圆扫描线

    找最深的圆,输出层数 类似POJ 2932的做法 圆扫描线即可.这里要记录各个圆的层数,所以多加一个维护编号的就行了. /** @Date : 2017-10-18 18:16:52 * @FileN ...

  3. 接口测试Case之面向页面对象编写规范

    一.什么是页面对象化 主要提倡的思想是:万物皆对象,即把一个Page看成一个对象,来进行接口自动化Case的编写,不要闲扯,直接讲怎么个操作法呢? 二.有什么优势? 2.1 Case层次清晰,便于管理 ...

  4. 利用requestAnimationFrame和Tween算法实现兼容所有浏览器的运动动画,直接秒杀Css3动画

    以下贴出Tween的代码: /* * Tween.js * t: current time(当前时间): * b: beginning value(初始值): * c: change in value ...

  5. .gitignore 失效问题解决

    对于Git,已经跟踪的文件,再加入到.gitignore中,会使忽略失效.使用下面3个命令使它重新生效 git rm -r --cached . git add . git commit -m &qu ...

  6. shell 判断为空打印

    判断参数是否为空-空退出并打印null #!/bin/sh echo $ name=${:?"null"} echo $name

  7. 第6月第6天 opengles 三角形

    1. http://blog.csdn.net/u010963658/article/details/52691578 2.多张图 https://www.oschina.net/question/2 ...

  8. springcloud中Feign配置详解

    Spring Cloud中Feign配置详解 到目前为止,小伙伴们对Feign的使用已经掌握的差不多了,我们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,我们要如何 ...

  9. 010_MAC下权限问题的那些事

    一. arun:bin arunyang$ sh catalina.sh start           #启动tomcat报一堆的没有权限~~~~(>_<)~~~~ 二.解决如下 aru ...

  10. java垃圾回收的回收器

    回收器的种类: --串行(–XX:+UseSerialGC ) Out ofBox算法,年轻代串行复制,年老代串行标记整理,主要用于桌面应用 --并行(–XX:+UseParallelGC ) 年轻代 ...