总目录详见https://blog.csdn.net/mrcrack/article/details/84471041
做题原则,找不到测评地址的题不做。2018-11-28
重走长征路---OI每周刷题记录---9月27日 2014
本周共计 题+题
测评地址:
后缀数组:
1.「codevs3160」最长公共子串
dp:
2.NOIP2001统计单词个数
后缀自动机:
3.「spoj1812」Longest Common Substring II
4.「codevs3160」最长公共子串
5.「spoj7258」Lexicographical Substring Search
扫描线+set:
6.「poj2932」Coneology
扫描线+set+树上删边游戏:
7.「FJOI2013」圆形游戏
结论:
8.「bzoj3706」「FJ2014集训」反色刷
最小环:
9.「poj1734」Sightseeing trip
gcd:
10.「codechefSUBGCD」Subarray GCD
模拟:
11.「codechefGRID」Sherlock and the Grid 「cf471A」MUH and Sticks
素数筛法:
12.「codechefSUBLCM」Subarray LCM //在线测评地址https://vjudge.net/problem/CodeChef-SUBLCM
后缀自动机+link cut tree:
13.「bzoj2555」SubString
贪心:
14.「bzoj3433」[Usaco2014 Jan]Recording the Moolympics
15.「cf471B」MUH and Important Things
dfs+树形dp:
16.「bzoj3631」[JLOI2014]松鼠的新家
dijkstra:
17.「bzoj3402」[Usaco2009 Open]Hide and Seek 捉迷藏
点分治:
18.「bzoj3697」「FJ2014集训」采药人的路径
规律:
19.「cf471C」MUH and House of Cards
kmp:
20.「cf471D」MUH and Cube Walls
bfs:
21.「NOIP模拟赛」栅栏迷宫
dfs:
22.「NOIP模拟赛」人偶师(60分)
dfs+map:
23.「NOIP模拟赛」人偶师
tarjan+树形dp:
24.「NOIP模拟赛」交通(70分)
题解:
后缀数组:
1.「codevs3160」最长公共子串
dp:
2.NOIP2001统计单词个数
后缀自动机:
3.「spoj1812」Longest Common Substring II
4.「codevs3160」最长公共子串
5.「spoj7258」Lexicographical Substring Search
扫描线+set:
6.「poj2932」Coneology
扫描线+set+树上删边游戏:
7.「FJOI2013」圆形游戏
结论:
8.「bzoj3706」「FJ2014集训」反色刷
最小环:
9.「poj1734」Sightseeing trip
gcd:
10.「codechefSUBGCD」Subarray GCD
模拟:
11.「codechefGRID」Sherlock and the Grid 「cf471A」MUH and Sticks
素数筛法:
12.「codechefSUBLCM」Subarray LCM
//Subarray LCM CodeChef - SUBLCM
//在线测评地址https://vjudge.net/problem/CodeChef-SUBLCM
//没想到CodeChef是一个印度OJ
//通过https://blog.csdn.net/shuxiao9058/article/details/7633054学习了Emacs使用
//上文中C-x指的是ctrl+x,C-f指的是ctrl+f,M-x指的是alt+x
//决定还是在noi linux下使用gedit编写C++代码
//该题,英文版写得比中文版好,请做如下对比
//Example case 2.The subarrays A2 to A3 and A3 to A4 are the maximum size possible.
//样例二:A1,A2,A3,A4 最大。
//所以,在此套OJ上,还是读英文版比较可靠。
//目前体会,同是Mac OS下的虚拟系统,linux比windows快多了
//该题核心,质因数分解,将当前该数的各个质因数,与之前数的质因数进行比较,若找不到,序列均有效。
//线性筛,目的,找到每个数的最小质因数。
//上述思想来自http://hzwer.com/4515.html不是讲懂的,而是代码看懂的2019-2-16 16:19
//开了控制台,编写一段代码,测试一段g++ lcm.cpp -o lcm
//not_prime[i]最终用来存储i对应的最小质因数
//在noi linux下安全感十足,不用担心爆0了,少什么头文件,编译的时候会提示。2019-2-26 22:09
//noi linux真是太好了,一编译就发现漏了头文件
//思路有些类最长上升子序列。
//样例通过,提交Language Rejected。那么好吧,先将中文注释删除
//再次提交,还是Language Rejected。啥情况。
//翻看他人提交情况,发现中文注释无需删除
//只需将Submit中的Language中的C++(gcc 6.3)改成C++14(gcc 6.3)即可。
//提交AC。2019-2-16 23:05
#include <stdio.h>
#include <string.h>
#define maxn 1000100
int prime[maxn],not_prime[maxn],tot=0,last[maxn];//last[i]质数i最后出现的位置。
void linear_shaker(int x){//线性筛,目的,找到每个数的最小质因数。
int i,j;
for(i=2;i<=x;i++){
if(!not_prime[i])prime[++tot]=i,not_prime[i]=i;
for(j=1;prime[j]*i<=x;j++){
not_prime[prime[j]*i]=prime[j];
if(i%prime[j]==0)break;
}
}
}
int max(int a,int b){
return a>b?a:b;
}
int main(){
int t,n,i,x,ans,pos,b;
linear_shaker(1000000);
scanf("%d",&t);
while(t--){
memset(last,0,sizeof(last)),ans=0,pos=0;//忘记了ans=0的初始化 pos=0放错位置,之前放到了for(i=1;i<=n;i++)之内。
scanf("%d",&n);
for(i=1;i<=n;i++){//以i位置的数字为结尾的最长序列计算
scanf("%d",&x);
while(x!=1){//分解x对应的质因数
b=not_prime[x];
pos=max(pos,last[b]);//找以离i位置数字最近的质因数b的位置,以及之前没有重复质因数的位置。
last[b]=i;
while(x%b==0)x/=b;//分解质因数
}
ans=max(ans,i-pos);
}
if(ans==1)printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}
后缀自动机+link cut tree:
13.「bzoj2555」SubString
贪心:
14.「bzoj3433」[Usaco2014 Jan]Recording the Moolympics
15.「cf471B」MUH and Important Things
dfs+树形dp:
16.「bzoj3631」[JLOI2014]松鼠的新家
dijkstra:
17.「bzoj3402」[Usaco2009 Open]Hide and Seek 捉迷藏
点分治:
18.「bzoj3697」「FJ2014集训」采药人的路径
规律:
19.「cf471C」MUH and House of Cards
kmp:
20.「cf471D」MUH and Cube Walls
bfs:
21.「NOIP模拟赛」栅栏迷宫
dfs:
22.「NOIP模拟赛」人偶师(60分)
dfs+map:
23.「NOIP模拟赛」人偶师
tarjan+树形dp:
24.「NOIP模拟赛」交通(70分)