zoukankan      html  css  js  c++  java
  • 【最小表示法】BZOJ2882-工艺

    【题目大意】

    求一个循环数列的最小表示法。

    【思路】

    最小表示法模板题。之前用SAM做的,MLE了hhhhh戳

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int MAXN=300000+50;
     7 int s[MAXN*2],n;
     8 
     9 void init()
    10 {
    11     scanf("%d",&n);
    12     for (int i=0;i<n;i++)
    13     {
    14         scanf("%d",&s[i]);
    15         s[i+n]=s[i];
    16     } 
    17 }
    18 
    19 void solve()
    20 {
    21     int i=0,j=1,k=0;
    22     while (k<n)
    23     {
    24         int t=s[(i+k)%(2*n)]-s[(j+k)%(2*n)];//不要忘记了这里要mod
    25         if (t==0) k++;
    26         else
    27         {
    28             if (t>0) i+=k+1;
    29                 else j+=k+1;
    30             if (i==j) j++;
    31             k=0;
    32         }
    33     }
    34     for (int r=1,now=i;r<=k;r++,now=(now+1)%(2*n)) 
    35     {
    36         printf("%d",s[now]);
    37         if (r!=k) printf(" ");
    38     }
    39 }
    40 
    41 int main()
    42 {
    43     init();
    44     solve();
    45     return 0;
    46 }
  • 相关阅读:
    Android设备管理器
    Android中读取手机联系人
    PopupWindow
    Activity之间数据的传递
    wpa_supplicant
    nandflash之基本特性
    NAND NOR Flash 和MTD
    mtd-util
    linux 常用命令
    minizip -基于zlib开源代码库
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/5770710.html
Copyright © 2011-2022 走看看