集训Day-1考试爆炸记+题解
T1简单题
emm首先前三个点暴力,这应该是个数论题,先把暴力打上再说
过了一会,回来想emm,目前没有logn的分解算法吧,所以应该是一个玄学思路题,
于是我开始想,如果最小是1,那么它是质数,
如果最小是2,那么sqrt(n)*sqrt(n)=n,
如果最小是3,那么³√n*³√n*³√n=n,
如果最小是4,那么pow(n,0.25)*pow(n,0.25)*pow(n,0.25)*pow(n,0.25)=n,
如果最小是5,那么此时pow(n,0.2)只有三千多,可以把素数在三千多以内的筛出来,然后把n在三千多里面的质数筛出来,再按照最小是2,3,4的方法再取min就能AC
#include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define LL long long using namespace std; int T,minn; LL n; int vst[3983],prime[3983]; double eps=1e-5; bool pd(LL n,int num) { double tt=pow(n,1.0/num); return (abs(round(tt)-tt)<eps); } int main() { for(int i=2;i<=3983;i++) { if(vst[i])continue; prime[++prime[0]]=i; for(int j=i;j<=3983/i;j++)vst[i*j]=1; } scanf("%d",&T); while(T--) { minn=0x3f3f3f3f; scanf("%lld",&n); int nn=pow(n,0.2)+5; for(int i=1;i<=prime[0]&&prime[i]<=nn;i++) { int num=0; if(!(n%prime[i])){while(!(n%prime[i])){n/=prime[i];num++;}minn=min(minn,num);} if(minn==1)break; } if(n!=1) { if(pd(n,4))minn=min(minn,4); else if(pd(n,3))minn=min(minn,3); else if(pd(n,2))minn=min(minn,2); else minn=1; } printf("%d\n",minn); } return 0; }
T2 送分题
emm点分树什么鬼?输出样例然后再见
T3 普及组送分题
emm不会写,这是什么高级数据结构暴力30再见
代码
#include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #include<map> using namespace std; map<int,int>mapp[100005]; int n,len[100005],q; string s[100005]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++){cin>>s[i];len[i]=s[i].length();} scanf("%d",&q); for(int i=1;i<=q;i++) { int x,y; scanf("%d %d",&x,&y); if(mapp[x][y]){printf("%d\n",mapp[x][y]);continue;} int bj; for(int j=min(len[x],len[y]);j>=0;j--) { bj=0; for(int k=j-1;k>=0;k--)if(s[x][len[x]-j+k]!=s[y][k]){bj=1;break;} if(!bj){mapp[x][y]=j;break;} } printf("%d\n",mapp[x][y]); } return 0; }
考后期望得分100+0+30=130,实际70+10+50=130,T1玄学,T2居然输出样例有10分,T3居然不是数据结构,如果极限数据就应该是两个很长的串一直询问,只需用map记下即可。
初三奆佬180吊打我%%%
end