本题给出了一个数学公式,一件衣服在第x天穿后,下一次最早穿是第x+N-1天。也就是两次穿同一件衣服的间隔应该是N-1天,由此可以递推出和周有关的公式。不妨设到达目标条件的周数为k,第一周穿是第一周的第d1天,最后一次穿是最后一周的第d2天,则(k-1)*N+(d2-d1)=(k-1)(*N-1),解得k = d1-d2+1。不难发现,当d1足够小,d2足够大时,到达目标条件可以不受规定限制,例如第一天穿的衣服最早可以在第1+N-1=N天穿,甚至还在同一周,因此这种情况的最小周数应该判定为1,即在求解时应该与1比较求max值。对每件衣服都进行比较,找出周目最大值即为答案。
using namespace std; int main(){ int N;cin>>N; vector<int> week_f(N+1); vector<int> week_l(N+1); int cloth,day; for(int i = 1;i<=N;i++){ cin>>cloth; week_f[cloth] = i; } for(int i = 1;i<=N;i++){ cin>>cloth; week_l[cloth] = i; } int ans = 0; for(int i = 1;i<=N;i++){ int temp = max(1,week_f[i]-week_l[i]+1); //cout<<temp<<endl; ans = max(ans,temp); } cout<<ans; return 0; }