#include<cstdio> #include<algorithm> #define Open(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout); using namespace std; const int N=5e6+5; const int M=105; const int inf=2e9; int l,r,p,ans,tot,cnt,prime[M/3],a[N],g[N]; bool check[M],f[N]; void prepare(){ for(int i=2;i<=p;i++){ if(!check[i]) prime[++tot]=i; for(int j=1;j<=tot&&i*prime[j]<=p;j++){ check[i*prime[j]]=1; if(!(i%prime[j])) break; } } } void dfs(int cur,int val){ if(cur>tot){ a[++cnt]=val; return ; } dfs(cur+1,val); while(1LL*val*prime[cur]<=r){ val*=prime[cur]; dfs(cur+1,val); } } int main(){ Open(calc) scanf("%d%d%d",&l,&r,&p); prepare(); dfs(1,1); sort(a+1,a+cnt+1); for(int i=2;i<=cnt;i++) g[i]=inf; f[1]=1;g[1]=0; for(int i=2,n=a[cnt];i<p;i++){ int k=1; for(int j=1;a[j]*i<=n;j++){ while(a[k]<a[j]*i) k++; g[k]=min(g[k],g[j]+1); f[k]|=g[k]+i<=p; } } for(int i=1;i<=cnt;i++) if(a[i]>=l&&f[i]) ans++; printf("%d ",ans); return 0; }
#include<cstdio> #include<cstring> #define Open(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout); using namespace std; const int N=1e5+5; int n,m,p,ans,len1,len2,g[N],fail[N]; int s1[N],s2[N]; int S1[N],S2[N]; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline void get_fail(){ int p=0;fail[1]=0; for(int i=2;i<=len2;i++){ while(p>0&&s2[i]!=s2[p+1]) p=fail[p]; if(s2[i]==s2[p+1]) p++; fail[i]=p; } } inline void kmp(){ int p=0; for(int i=1;i<=len1;i++){ while(p>0&&s1[i]!=s2[p+1]) p=fail[p]; if(s1[i]==s2[p+1]) p++; if(p==len2){ g[++ans]=i-len2+1; p=fail[p]; } } } void deal(int n,int *S,int *s){ for(int i=1;i<n;i++){ if(S[i+1]>S[i]) s[i]=2; if(S[i+1]==S[i]) s[i]=1; if(S[i+1]<S[i]) s[i]=0; } } int main(){ Open(pat); n=read();m=read();p=read(); len1=n-1;len2=m-1; if(n<m){puts("0");return 0;} if(m==1){ printf("%d ",n); for(int i=1;i<=n;i++) printf("%d ",i); return 0; } for(int i=1;i<=n;i++) S1[i]=read(); for(int i=1;i<=m;i++) S2[i]=read(); deal(n,S1,s1); deal(m,S2,s2); get_fail(); kmp(); printf("%d ",ans); for(int i=1;i<=ans;i++) printf("%d ",g[i]); return 0; }
#include<cstdio> #define min(a,b) (a<b?a:b) #define Open(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout); using namespace std; const int N=3e5+5; int n,m,t,a[N],f[N]; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int main(){ Open(array); n=read();m=read();t=read(); for(int i=1;i<=n;i++) a[i]=read(); //first:all f[i]=0 //f[i]:length of lis that val<=i for(int i=1;i<=min(m,t);i++){ for(int j=1;j<=n;j++){ for(int k=a[j];k<=m;k++){ if(f[k]<f[a[j]-1]+1){ f[k]=f[a[j]-1]+1; } else break; } } } printf("%d ",f[m]); return 0; }