日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4162 Shape Number(最小表示法)

發(fā)布時(shí)間:2024/8/22 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 4162 Shape Number(最小表示法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:http://acm.hdu.edu.cn/showproblem.php?pid=4162

?

大意:原串通過相鄰的數(shù)字相減得到的差或8減該差得到一個(gè)新串,然后輸出新串(看成環(huán))中字典序最小的

那個(gè)串。。。。

?

這里用到最小表示法:其維護(hù)i和j指針,分別指向(共有L(串長)個(gè)串)其中2個(gè)串(其實(shí)只有一個(gè)串,拆成2個(gè)串好理解點(diǎn))的串頭(注意當(dāng)比較這兩個(gè)串的大小的時(shí)候i和j都不動(dòng),任然指串頭,而這個(gè)串頭是指以該位置開始而得到的串的串頭),他是通過k(因?yàn)槿绻灰雓,而i和j是移動(dòng)的,比較完成后i和j回不了串頭)來比較這兩個(gè)串,即i+k和j+k就是比較這兩個(gè)串時(shí)的指針。。。。。。。

?

然后,當(dāng)不相等的時(shí)候,因?yàn)槲覀兦蟮氖亲钚〉拇?#xff0c;所以要移動(dòng)大的指針,而小的指針不動(dòng),而這個(gè)小的指針很有可能就是我們所想要求的指針。。。。而移動(dòng)的幅度是k+1使效率大大提高。。。。。因?yàn)槿绻频絒大指針后.....k]中的一個(gè)的話,

以這個(gè)位置為開頭的串也一定比小串大。。。。。注意一點(diǎn),i或j指的位置都可能是想求的位置。。。。。。

總之,求最小表示,就小的不變,求最大表示就大不變。。。。。

還有一點(diǎn),就是始終保持i<j,因?yàn)槿绻鹖 == j的話事實(shí)上就在比較同一個(gè)串。。。。沒意義,而最后返回的就是i == j時(shí)

的指針,而這個(gè)指針極小可能是想要的結(jié)果。。。。。最后為什么返回小的那個(gè)呢?因?yàn)榈竭_(dá)該位置就不在動(dòng)了。。

而另外一個(gè)指針已經(jīng)后移到出界了(即該指針 == l)

?

#include <iostream>
#include <cstring>
using namespace std;

#define LL __int64

char c[333333], c1[333333];

//最小表示法
int Minp(char *c, int l)
{
int i = 0, j = 1, k = 0, t;
while (i < l && j < l && k < l)
{
t = c[(i+k)%l] - c[(j+k)%l];
if (t == 0)
{
k++;
}
else
{

if (t > 0)//以i開頭的串較大,所以i移動(dòng),j不變(因?yàn)榍笞钚〈南聵?biāo))
{
i += k + 1;
}
else//i處小
{
j += k + 1;
}
if (i == j)
{
j++;
}
k = 0;///
}
}
return i < j ? i : j;
}


int main()
{
int n;
int i, j;
int l, k;
while (~scanf("%s", c))
{
l = strlen(c);
for (i = 0; i < l; i++)
{
c1[i] = (c[(i+1)%l] >= c[i] ? c[(i+1)%l] - c[i] + '0' : 8 - (c[i] - c[(i+1)%l]) + '0');
}
//puts(c1);

k = Minp(c1, l);

//cout << k << endl;
for (i = 0, j = k; i < l; i++, j = (j+1)%l)
{
printf("%c", c1[j]);
}
puts("");
}


return 0;
}


轉(zhuǎn)載于:https://www.cnblogs.com/qiufeihai/archive/2012/04/06/2434869.html

總結(jié)

以上是生活随笔為你收集整理的HDU 4162 Shape Number(最小表示法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。