usingnamespacestd;#defineMAX10000intorigin[101]={0};typedefstructrange_st{intl,r;}range_st,*range_t;intranges_len=0;range_stranges[MAX];range_sttemp[MAX];voidunion_range(range_strg){inti,j,union_count;for(i=0;i

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Timus 1515

系統(tǒng) 1577 0
      
        #include 
      
      
        <
      
      
        iostream
      
      
        >
      
      
        
using namespace std;

#define MAX 10000

int origin[ 101 ] = { 0 };

typedef
struct range_st {
int l,r;
} range_st,
* range_t;

int ranges_len = 0 ;
range_st ranges[MAX];
range_st temp[MAX];

void union_range(range_st rg) {
int i,j,union_count;
for (i = 0 ;i < ranges_len && ranges[i].r + 1 < rg.l;i ++ ) ; // find the first range that can union rg
if (i == ranges_len) // no such range found
ranges[ranges_len ++ ] = rg;
else if (ranges[i].r < rg.r) {
ranges[i].r
= rg.r;
}

union_count
= 0 ;
for (j = i + 1 ;j < ranges_len;j ++ ) {
if (ranges[i].r + 1 >= ranges[j].l) { // self-union occur
if (ranges[i].r < ranges[j].r)
ranges[i].r
= ranges[j].r;

union_count
++ ;
}
}

ranges_len
-= union_count;
}

void update_range( int n) {
int temp_len = 0 ;
range_st rg;
for ( int i = 0 ;i < ranges_len;i ++ ) {
rg.l
= ranges[i].l + n;
rg.r
= ranges[i].r + n;
temp[temp_len
++ ] = rg;
}

for ( int i = 0 ;i < temp_len;i ++ )
union_range(temp[i]);
}

void print_range() {
for ( int i = 0 ;i < ranges_len;i ++ )
printf(
" (%d,%d) " , ranges[i].l, ranges[i].r);
printf(
" \n " );
}

int main() {

int i,j,k;
int m,n,d,t,ret;
range_st rg;
int N;
cin
>> N;
for (i = 0 ;i < N;i ++ )
cin
>> origin[i];

rg.l
= rg.r = 0 ;
ranges[ranges_len
++ ] = rg; // init range (0,0)

for (i = 0 ;i < N;i ++ ) {
n
= origin[i];

update_range(n);

// print_range();

if (ranges_len > 1 )
break ;
}

ret
= ranges[ 0 ].r + 1 ;

cout
<< ret << endl;

return 0 ;
}

囧死的一題目,給出N個(gè)數(shù)(N<=100),求一個(gè)最小的數(shù),這個(gè)數(shù)不能是這N個(gè)數(shù)的任何組合的求和數(shù)。

暴力的思維讓我去計(jì)算所以組合數(shù),根據(jù)前i個(gè)數(shù)生成的所有和數(shù),去計(jì)算第i+1個(gè)數(shù)能夠生成的和數(shù),然后把這兩堆和數(shù)做合并,這可以正確地求出所有可能的和數(shù),但就死活ME,因?yàn)閿?shù)量太大了。注意給出的N個(gè)數(shù),每個(gè)數(shù)最大值是10^6。

在使用第i個(gè)數(shù)的時(shí)候,其實(shí)就可以從集合中遍歷,查看是否存在一個(gè)數(shù)少于Ni并且不在集合中,如果是,那么這個(gè)就是答案,但寫的代碼過不了,一直WA 3。

后來換了個(gè)思維,通過在草稿上寫了些例子,認(rèn)為這題目應(yīng)該有很高效的計(jì)算方法才是,結(jié)果就得出了最后AC的代碼。屬于0開銷代碼。

作出的改變是把生成的和數(shù)集合中,連續(xù)的和數(shù)表示成范圍,這樣處理數(shù)據(jù)的數(shù)量級(jí)就大減,并且當(dāng)發(fā)現(xiàn)存在兩個(gè)不連續(xù)的范圍后,就能馬上得出答案。

Timus 1515


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 狠狠狠综合色 | 亚洲国产美女视频 | 色老头xxxwww作爱视频 | 亚洲精品一二三四区 | 亚洲国产精品自产拍在线播放 | 99久久精品免费观看区一 | 久草在线观看福利 | 久久社区视频 | 国产一区二区三区毛片 | 一级特级毛片 | 一级女性全黄生活片看看 | 尤物精品国产福利网站 | 夜夜摸视频网 | 91视频爱爱| 久久黄色影院 | 午夜精品久久久久久久99热浪潮 | 好看的中文字幕在线 | 免费观看日本特色做爰视频在线 | 999国产高清在线精品 | 特大毛片 | 久久国产亚洲 | 色综合色综合色综合色综合网 | 国产香蕉尹人综合在线 | 国产网红自拍 | 国产福利一区二区在线精品 | 四虎一级片 | 伊人狼人久久 | 普通话对白国产情侣自啪 | 成人免费淫片在线费观看 | 亚洲国产日韩欧美一区二区三区 | 操视频网站 | 国产香蕉一区二区在线观看 | 就去色综合 | 一级毛片在线看 | 久久精品人 | 婷婷sese| 第一福利视频网 | 亚洲日本人成网站在线观看 | 国产免费一区二区三区免费视频 | 色偷偷91久久综合噜噜噜 | 亚洲韩国日本一级二级r级 亚洲韩精品欧美一区二区三区 |