T1

经过一波大力推式子,发现答案是 \(\frac{n^{2}-1}{9}\) 。

式子回头再补,可能会

Code
  1. #include<cstdio>
  2. #define re register
  3. #define int long long
  4. namespace OMA
  5. {
  6. int t,n;
  7. const int p = 998244353;
  8. inline int read()
  9. {
  10. int s=0,w=1; char ch=getchar();
  11. while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
  12. while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
  13. return s*w;
  14. }
  15. inline int quickpow(int a,int b)
  16. {
  17. int ans = 1;
  18. while(b)
  19. {
  20. if(b&1)
  21. { ans = ans*a%p; }
  22. a = a*a%p;
  23. b >>= 1;
  24. }
  25. return ans;
  26. }
  27. signed main()
  28. {
  29. t = read();
  30. int inv = quickpow(3,p-2);
  31. while(t--)
  32. {
  33. int n = read()%p,ans = 0;
  34. /*for(re int i=1; i<=n; i++)
  35. {
  36. (ans += i*(i-1)%p*inv%p) %= p;
  37. }*/
  38. printf("%lld\n",(n%p*n%p-1)%p*quickpow(9,p-2)%p);
  39. }
  40. return 0;
  41. }
  42. }
  43. signed main()
  44. { return OMA::main(); }

T2

考场想到了之前的noip14T3,当时xin用的vector 骗分...所以,我也....

好吧,是要加俩剪枝的,

  • 当前枚举长度超过原串,直接break,换集合中的下一个串去接,
  • 如果当前接出来的串对答案无贡献,那也break,因为在一个没出现过的串上加字符,怎么加也不会再产生贡献。不加第二个只能拿20pts

用了个vector和map。

我也不知道为什么我要这么认真的讲暴力,大概因为只会写暴力吧QAQ

40pts
  1. #include<map>
  2. #include<vector>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define MAX 10010
  6. #define re register
  7. namespace OMA
  8. {
  9. int n,len[MAX];
  10. long long ans;
  11. char s[MAX],ch[MAX][MAX];
  12. std::map<std::vector<char>,int>vis;
  13. signed main()
  14. {
  15. //freopen("my.out","w",stdout);
  16. scanf("%s%d",s+1,&n);
  17. len[0] = strlen(s+1);
  18. //printf("\n");
  19. for(re int i=1; i<=len[0]; i++)
  20. {
  21. for(re int j=i+1; j<=len[0]; j++)
  22. {
  23. std::vector<char>str;
  24. for(re int k=i; k<=j; k++)
  25. { str.push_back(s[k]); }
  26. vis[str]++;
  27. //for(re int k=0; k<str.size(); k++)
  28. //{ printf("%c",str[k]); }
  29. //printf("\n");
  30. //printf("%d\n",vis[str]);
  31. }
  32. }
  33. for(re int i=1; i<=n; i++)
  34. { scanf("%s",ch[i]+1); len[i] = strlen(ch[i]+1); }
  35. for(re int i=1; i<=n; i++)
  36. {
  37. for(re int j=len[i]; j>=1; j--)
  38. {
  39. for(re int k=1; k<=n; k++)
  40. {
  41. for(re int l=1; l<=len[k]; l++)
  42. {
  43. if(l+len[i]-j+1>len[0])
  44. { break ; }
  45. std::vector<char>str;
  46. for(re int x=j; x<=len[i]; x++)
  47. { str.push_back(ch[i][x]); }
  48. for(re int x=1; x<=l; x++)
  49. { str.push_back(ch[k][x]); }
  50. if(!vis[str])
  51. { break ; }
  52. //printf("back:%d front:%d: ",i,k);
  53. //for(re int x=0; x<str.size(); x++)
  54. //{ printf("%c",str[x]); }
  55. //if(vis[str])
  56. //{ printf(" true %d",vis[str]); }
  57. //printf("\n");
  58. ans += vis[str];
  59. }
  60. }
  61. }
  62. }
  63. printf("%lld\n",ans);
  64. return 0;
  65. }
  66. }
  67. signed main()
  68. { return OMA::main(); }

正解还没改出来,所以先咕了。

T3

考场上推出了\(k=2\),但没想到也是\(k>5\) 的时候,加上当时脑抽,一心去推\(k=3\)的, 式子没推出来,其他式子还码错了。不过竟然能过样例

正解就是推式子。

原式子不想写了,直接看代码。

80pts
  1. #include<cstdio>
  2. #define MAX 300030
  3. #define re register
  4. #define int long long
  5. namespace OMA
  6. {
  7. int c[MAX],inv[MAX];
  8. int t,n[MAX],m[MAX],k[MAX];
  9. const int p = 3e5+7;
  10. inline int read()
  11. {
  12. int s=0,w=1; char ch=getchar();
  13. while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
  14. while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
  15. return s*w;
  16. }
  17. inline int quickpow(int a,int b)
  18. {
  19. int ans = 1;
  20. while(b)
  21. {
  22. if(b&1)
  23. { ans = ans*a%p; }
  24. a = a*a%p;
  25. b >>= 1;
  26. }
  27. return ans;
  28. }
  29. inline int min(int a,int b)
  30. { return a<b?a:b; }
  31. inline int max(int a,int b)
  32. { return a>b?a:b; }
  33. inline int abs(int a)
  34. { return a>=0?a:0; }
  35. inline int C(int n,int m)
  36. { return m>n?0:c[n]*inv[n-m]%p*inv[m]%p; }
  37. inline int lucas(int n,int m)
  38. { return !m?1:C(n%p,m%p)*lucas(n/p,m/p)%p; }
  39. int ans;
  40. inline int sum1(int n)
  41. { return (n%p*(n%p+1))>>1; }
  42. inline int sum2(int n)
  43. { return (n%p-1)*n%p*(n%p+1)%p; }
  44. #define n n[i]
  45. #define m m[i]
  46. #define k k[i]
  47. inline void task0(int i)
  48. {
  49. ans = 0;
  50. for(re int a=1; a<=n; a++)
  51. {
  52. for(re int b=1; b<=m; b++)
  53. { (ans += lucas(min(a,b)-1,k-1)) %= p; }
  54. }
  55. ans = ans*2%p;
  56. (ans += lucas(n,k)*m%p+lucas(m,k)*n%p) %= p;
  57. } // OK
  58. inline void task1(int i)
  59. { ans = (n%p)*(m%p)%p; } // OK
  60. inline void task3(int i)
  61. {
  62. for(re int len=2; len<=m; len++)
  63. { (ans += 4*(n-len+1)%p*(m-len+1)%p) %= p; }
  64. for(re int len=1; len<=n/2; len++)
  65. { (ans += 2*abs(n-len)%p*abs(m-len-len)%p+2*abs(m-len)%p*abs(n-len-len)%p) %= p; }
  66. }
  67. inline void task4(int i)
  68. {
  69. for(re int len=2; len<=m; len++)
  70. { (ans += (n-len+1)%p*(m-len+1)%p)%= p ; }
  71. for(re int len=3; len<=m; len+=2)
  72. { (ans += 4*(n-len+1)%p*(m-len+1)%p) %= p; }
  73. for(re int len=1; len<=m/2; len++)
  74. { (ans += abs(n-len-len)%p*abs(m-len-len)%p) %= p; }
  75. for(re int len=1; len<=n/2; len++)
  76. { (ans += 2*abs(n-len)%p*abs(m-len-len)%p+2*abs(m-len)%p*abs(n-len-len)%p) %= p; }
  77. }
  78. inline void task5(int i)
  79. {
  80. for(re int len=3; len<=m; len+=2)
  81. { (ans += (n-len+1)%p*(m-len+1)%p) %= p; }
  82. for(re int len=1; len<=m/2; len++)
  83. { (ans += abs(n-len-len)%p*abs(m-len-len)%p) %= p; }
  84. }
  85. inline void swap(int &a,int &b)
  86. { int t=a; a=b; b=t; }
  87. signed main()
  88. {
  89. t = read();
  90. for(re int i=1; i<=t; i++)
  91. { n = read(),m = read(),k = read(); }
  92. int top = p-1;
  93. c[0] = inv[0] = 1;
  94. for(re int i=1; i<=top; i++)
  95. { c[i] = i*c[i-1]%p; }
  96. inv[top] = quickpow(c[top],p-2);
  97. for(re int i=top-1; i; i--)
  98. { inv[i] = (i+1)*inv[i+1]%p; }
  99. for(re int i=1; i<=t; i++)
  100. {
  101. if(n<m)
  102. { swap(n,m); }
  103. task0(i);
  104. if(k==1)
  105. { task1(i); }
  106. else if(k==2)
  107. { ; }
  108. else if(k==3)
  109. { task3(i); }
  110. else if(k==4)
  111. { task4(i); }
  112. else if(k==5)
  113. { task5(i); }
  114. else
  115. { ; }
  116. printf("%lld\n",ans);
  117. }
  118. return 0;
  119. }
  120. }
  121. signed main()
  122. { return OMA::main(); }

然而这过不了后两个点,会T,考虑将式子中的循环拆开。

目前正在化\(k=5\),等回头化出来,再补上吧。

noip25的更多相关文章

随机推荐

  1. 一道内部ctf文件包含题

    拿到题目 在burp里看下 拿到源码 很明显是一道文件包含题目,包含cookie里的值,于是构造Cookie:language=chinese试试   文件变成中文的了,说明中文语言进行了包含并替换 ...

  2. YAOI Round #5 题解

    前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/13 Div.2 : http://47.110.12.131:9016/contest/12 D ...

  3. Linux- RPM与yum软件包安装

    Linux安装及管理程序一.Linux应用程序基础1)应用程序与系统命令的关系2)典型应用程序的目录结构3)常见的软件包封装类型二.RPM包管理工具① RPM软件包管理器Red-Hat Package ...

  4. Pandas高级教程之:稀疏数据结构

    目录 简介 Spare data的例子 SparseArray SparseDtype Sparse的属性 Sparse的计算 SparseSeries 和 SparseDataFrame 简介 如果 ...

  5. c++ 进制转换源代码

    #include<stdio.h> int main() { char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C ...

  6. Java基础00-循环语句7

    1. for循环语句 1.1 循环结构 1.2 for循环语句的格式 执行流程图: 1.3 案例 (1)输出数据 (2)求和 (3)求偶数和 (4)水仙花 public static void mai ...

  7. PAT乙级:1084 外观数列 (20分)

    PAT乙级:1084 外观数列 (20分) 题干 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d ...

  8. centos7 源码安装指定版本的php7

    很多时候可能会遇到需要手动源码安装软件的时候,所以自己实践了一把,并且把安装过程中遇到的问题,以及在网上找到的解决办法(实测有效)都记录下来,方便日后学习实践. 1. 系统环境 # cat /etc/ ...

  9. JAVA web环境搭建(使用Tomcat8整合httpd)

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建Tomcat并整合httpd的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要查 ...

  10. 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class cn.star.MybatisTest)

    bug描述: 在Springboot整合Junit的时候编写测试类进行测试时, 出现以下错误: 十一月 28, 2019 2:53:48 下午 org.junit.vintage.engine.des ...