题目链接:
http://sustoj.com/JudgeOnline/contest.php?cid=1090

A: 最长回文串

马拉车 裸题,

但因为数据很水,所以暴力也是可以过的

下面简单介绍一下马拉车算法

回文分为偶回文(abba)和奇回文(abcba)。在处理奇偶回文之间有差异,所以用到了一个技巧在 (每个字符之间和开头) 插入一个无关的字符,比如说: abbahopxpo 转换为 $#a#b#b#a#h#o#p#x#p#o# ('$' 是防止越界)起初有一个偶回文abba和一个奇回文opxpo,被转换为#a#b#b#a#和#o#p#x#p#o#,长度都转换成了奇数。回文半径数组radius回文半径数组radius是用来记录以每个位置的字符为回文中心求出的回文半径长度,如下图所示

可以看出,radius[i] - 1正好是原字符串中最长回文串的长度。求解回文半径数组radiusmx 代表以 id 为中心的最长回文的右边界,也就是mx = id + radius[id]。

如图,mx 到 mx 关于 id 对称点之间是一个回文串,要是从 j 到 mx 的对称点 之间存在回文串,那么 i 到 mx 之间也一定会存在回文串那么以 i 为对称点的回文串的长度最少是 min(radius[j],mx−i)并且j=2∗id−i所以最终优化的是 radius[i]=min(radius[2∗id−i],mx−i)
例题一

https://cn.vjudge.net/problem/HDU-3068

AC code
/*
最长回文
HDU - 3068
https://cn.vjudge.net/problem/HDU-3068
题面:最长回文长度
解法:马拉车算法
*/
#include <bits/stdc++.h>
using namespace std;
#define maxn 300005
int radius[maxn];
char s[maxn];
char s_new[maxn];
int init(){int len=strlen(s);s_new[0]='$';s_new[1]='#';int j=2;for(int i=0;i<len;i++){s_new[j++]=s[i];s_new[j++]='#';}s_new[j]='\0';return j;
}
int Manacher(){int len=init();int ans=-1;int id;int mx=0;for(int i=1;i<len;i++){if(i<mx) radius[i]=min(radius[2 * id - i], mx - i);else radius[i]=1;while(s_new[i-radius[i]]==s_new[i+radius[i]]){radius[i]++;}if(mx<i+radius[i]){id=i;mx=i+radius[i];}ans=max(ans,radius[i]-1);}return ans;
}
int main(){while(~scanf("%s", s)){printf("%d\n", Manacher());}
}

B: 小K的弹夹

原题是:
L. Poor God Water(ACM-ICPC 2018 焦作赛区网络预赛)
解法呢也很简单:矩阵快速幂
难点是能不能想到矩阵快速幂 和 怎么构造矩阵

构造矩阵


黄色的表示不可能出现的情况, 前两个中后面的必须等于后两个中前面
蓝色是规律(1)
红色是规律(2)

AC code
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define ll long long
struct matrix{//矩阵快速幂ll m[9][9];
};
matrix matrix_multi(matrix a,matrix b){matrix tmp;for(int i=0;i<9;i++)for(int j=0;j<9;j++){tmp.m[i][j]=0;for(int k=0;k<9;k++)tmp.m[i][j]=((tmp.m[i][j])% (MOD) + (a.m[i][k]*b.m[k][j]+MOD)% (MOD)) % (MOD);}return tmp;
}
matrix matrix_pow(matrix a,matrix b,ll n){while(n>0){if(n&1) b=matrix_multi(a,b);a=matrix_multi(a,a);n>>=1;}return b;
}
int main(){int T;cin>>T;ll n;matrix a;while(T--){memset(a.m,0,sizeof a.m);a.m[0][1]=a.m[0][2]=1;a.m[1][3]=a.m[1][4]=1;a.m[2][6]=a.m[2][7]=a.m[2][8]=1;a.m[3][0]=a.m[3][2]=1;a.m[4][3]=a.m[4][5]=1;a.m[5][6]=a.m[5][8]=1;a.m[6][0]=a.m[6][1]=a.m[6][2]=1;a.m[7][4]=a.m[7][5]=1;a.m[8][6]=a.m[8] [7]=1;cin>>n;if(n==2){cout<<9<<endl;continue;}if(n==1){cout<<3<<endl;continue;}matrix ans=matrix_pow(a,a,n-3);ll num=0;for(int i=0;i<9;i++){for(int j=0;j<9;j++){num=(num+ans.m[i][j])%MOD;}}cout<<num<<endl;}return 0;
}

C: 费马小定理

原题是:
What day is that day?
先说费马小定理

如果 ppp是素数 , aaa 是正整数,且GCD(a,p)=1GCD(a,p)= 1GCD(a,p)=1 , 则 ap−1≡1(modp)a^{p-1} ≡ 1 (mod \ \ p)ap−1≡1(mod  p)

N为任意数,所以N可以等于N=7K1+m1其中K1≥0,0≤m1<7N为任意数,所以N可以等于 N=7K_1+m_1 其中 K_1≥0,0≤m_1<7N为任意数,所以N可以等于N=7K1​+m1​其中K1​≥0,0≤m1​<7

NN%7=(7K1+m1)N%7=m1N%7N^N\%7=(7K_1+m_1)^N\%7=m_1^N\%7NN%7=(7K1​+m1​)N%7=m1N​%7

m1和7互质,由费马小定理得m16%7=1m_1和7互质,由费马小定理得 m_1^6\%7=1m1​和7互质,由费马小定理得m16​%7=1

N为任意数,所以N可以等于N=6K2+m2其中K2≥0,0≤m2<6N为任意数,所以N可以等于 N=6K_2+m_2 其中 K_2≥0,0≤m_2<6N为任意数,所以N可以等于N=6K2​+m2​其中K2​≥0,0≤m2​<6

m1N%7=m1(6K2+m2)%7=m1m2%7m_1^N\%7=m_1^{(6K_2+m_2)}\%7=m_1^{m_2}\%7m1N​%7=m1(6K2​+m2​)​%7=m1m2​​%7

由于0≤m1<7,0≤m2<6因此可知有7∗6=42种情况会循环出现由于0≤m_1<7, 0≤m_2<6 因此可知有7*6=42种情况会循环出现由于0≤m1​<7,0≤m2​<6因此可知有7∗6=42种情况会循环出现

但每42个数后他们得起始数字会发生改变,所以总循环数为7∗42=294但每42个数后他们得起始数字会发生改变,所以总循环数为7*42=294但每42个数后他们得起始数字会发生改变,所以总循环数为7∗42=294

AC code

先暴力跑前500个,然后打表
有些人可能直接就能从表里直接发现到规律

#include <algorithm>
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
char c[8][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
typedef long long ll;
ll pow(ll x,ll n,ll mod)//快速幂
{ll res=1;while(n>0){if(n%2==1){res=res*x;res=res%mod;}x=x*x;x=x%mod;n>>=1;}return res;
}
int main(){int m;while(1){scanf("%d", &m);int ans=0;for(int i=1;i<=500;i++){printf("%d ", ans);ans=(ans+pow(i,i,7))%7;if(i%m==0) cout<<endl;}}return 0;
}
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int mp[500]={0,1,5,4,1,4,5,5,6,0,4,6,0,6,6,0,2,0,1,6,0,0,1,5,6,3,0,6,6,0,1,4,6,5,6,6,0,2,4,5,
0,6,6,0,4,3,0,3,4,4,5,6,3,5,6,5,5,6,1,6,0,5,6,6,0,4,5,2,6,5,5,6,0,3,5,4,5,5,6,1,
3,4,6,5,5,6,3,2,6,2,3,3,4,5,2,4,5,4,4,5,0,5,6,4,5,5,6,3,4,1,5,4,4,5,6,2,4,3,4,4,
5,0,2,3,5,4,4,5,2,1,5,1,2,2,3,4,1,3,4,3,3,4,6,4,5,3,4,4,5,2,3,0,4,3,3,4,5,1,3,2,
3,3,4,6,1,2,4,3,3,4,1,0,4,0,1,1,2,3,0,2,3,2,2,3,5,3,4,2,3,3,4,1,2,6,3,2,2,3,4,0,
2,1,2,2,3,5,0,1,3,2,2,3,0,6,3,6,0,0,1,2,6,1,2,1,1,2,4,2,3,1,2,2,3,0,1,5,2,1,1,2,
3,6,1,0,1,1,2,4,6,0,2,1,1,2,6,5,2,5,6,6,0,1,5,0,1,0,0,1,3,1,2,0,1,1,2,6,0,4,1,0,
0,1,2,5,0,6,0,0,1,3,5,6,1,0
};
char c[8][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
typedef long long ll;
ll pow(ll x,ll n,ll mod)//快速幂
{ll res=1;while(n>0){if(n%2==1){res=res*x;res=res%mod;}x=x*x;x=x%mod;n>>=1;}return res;
}
int main(){int t,n;scanf("%d", &t);mp[1]=1;while(t--){scanf("%d", &n);printf("%s\n", c[mp[n%294]]);}return 0;
}

SUST 20/3/27 题解相关推荐

  1. 给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。【MOOC】

    目   录 题 目①[关键字(19, 14, 23, 1, 65, 20, 84, 27, 55, 11, 10, 79)] 解法一(线性探测再散列) 解法二(链地址法) 题 目②[关键字(19, 1 ...

  2. Wannafly 挑战赛27 题解

    Wannafly 挑战赛27 题目连接 https://www.nowcoder.com/acm/contest/215#question A.灰魔法师 题目 题解 考虑到可能的完全平方数只有4004 ...

  3. UPC-2021个人训练赛第20场-部分题解

    目录 RGB Triplets 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 Select Half 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 心灵的抚 ...

  4. 定积分证明题例题_第二十天(20,11,27):积分中值定理

    之前我们讲述了一大堆的积分技巧: 槿灵兮:第十九天(20,11,26):无理代数分式的积分法​zhuanlan.zhihu.com 今天我们过渡一下下,开始涉及一点积分的证明题~ 我首先想介绍两个基本 ...

  5. 1027 打印沙漏 (20分)——27行代码AC(结构清晰)

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ********** ...

  6. pat题解java,1039 到底买不买 (20分) Java题解 PAT (Basic Level) Practice (中文)- 巧妙开大数组减少代码量...

    1039 到底买不买 (20分) 原题链接:传送门 一.题目: 输入样例 1: ppRYYGrrYBR2258 YrR8RrY 输出样例 1: Yes 8 输入样例 2: ppRYYGrrYB225 ...

  7. 牛客小白月赛27 题解

    比赛时有点事,赛后补了一下题 A 巨木之森 题意就不复述了, 这题的核心内容就是树的直径. 观察下面的图可以发现,一个点遍历整棵树的路程就是 所有的边*2 - 从这个点出发所到的最远距离.根据树的直径 ...

  8. 一台计算机显示屏的面积是20,24/27/32寸电脑显示器尺寸多大?长宽多少厘米?显示屏长宽与面积的算法...

    最近小编想了解24寸和27寸显示器的尺寸有多大,以及它们的长宽各是多少,于是网上查了一下,结果发现基本都是复制粘贴的垃圾答案,根本找不到一个正确的答案,于是小编便查阅了显示器尺寸的计算方法,从而求出电 ...

  9. 20/06/27 charles安装报【User installations are disabled via policy on the machine】解决方法

    1.在运行里面输入[ gpedit.msc]回车 2. 计算机配置>>管理模板>>windows组件>>windows Installer>>禁止用户安 ...

最新文章

  1. 3D目标检测深度学习方法之voxel-represetnation内容综述(一)
  2. 二代测序数据统计分析中为什么是负二项分布?
  3. 游戏数据的捕捉(郁金香学习笔记)
  4. 11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数
  5. Android Notification总结
  6. Flask的状态保持和上下文管理
  7. HTML5 Web Storage事件
  8. iOS利用SDWebImage实现缓存的计算与清理
  9. pb程序怎么发布到iis_怎么使用抖音小程序第三方平台系统开发制作发布抖音小程序+教程...
  10. Python面试-DB相关
  11. 声网 环信:是的,我们在一起了!
  12. erlang observer工具
  13. java案例代码8--最终要随机输出一组出来做为排名
  14. 从零开始学习Sencha Touch MVC应用之十三
  15. 推荐一款java微信答题小程序源码知识竞赛问答pk头脑答题游戏
  16. win10系统通过关键字快速搜索文件内容的软件
  17. openstack源码架构_openstack创建虚拟机源码阅读
  18. 从实习生到算法专家,他只用了2年!
  19. 滑块验证成功后,对勾对号显示为根号
  20. 深入理解 window.onload

热门文章

  1. 支付宝“刷脸支付”韩国遇冷 真相让人笑出眼泪
  2. Nvidia Jetson TX2 详细刷机教程及踩坑记录(Jetpack3.3,python2.7,torch1.2,torchvision0.2.2)
  3. 滑滑梯中的智慧(zt)
  4. MIMO中SM系统原理与仿真
  5. 云计算与云存储,具体是什么关系?
  6. 罗永浩:我不是打断你,我是讽刺你
  7. python 双重差分_双重差分的理论与实践
  8. 004.python科学计算库pandas(中)
  9. 详解RS232、RS485、RS485、串口握手
  10. 转载~时间复杂度分析(个人强推)