模擬7 25 壽司

2022-05-06 23:06:10 字數 3405 閱讀 3766

事實上我不知道該把這道題放在那一塊........

此題用了1部分二分的思想,還有函式思想,sdfz大佬用的三分思想orz.......

40分暴力:

將環搞成2len的序列,然後與處理出

sumlb[i]表示從1-i的b移動到左段的總步數 blcnt[i]表示從1-i的b的個數,其餘相似。。。

然後分n個區間列舉斷點,有一點:

kx=(sum_lb[k]-sum_lb[l-1])+(sum_rb[k+1]-sum_rb[r+1]);

kxl=rlcnt[l-1]*(blcnt[k]-blcnt[l-1]);

kxr=rrcnt[r+1]*(brcnt[k+1]-brcnt[r+1]);

return kx-kxl-kxr

這裡我們不能單純加kx因為陣列表示從1-i而此時區間l-r則不是

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include8 #include9 #include10

#define ps push_back

11#define maxn 105101

12#define ll long long

13using

namespace

std;

14int

t;15

intn;

16char

c[maxn];

17int

a[maxn];

18int

len;

19int

minn;

20int

sum1,sum2;

21int

sum_lb[maxn],sum_rb[maxn];

22int

blcnt[maxn],brcnt[maxn],rrcnt[maxn],rlcnt[maxn];

23int getsum(int l,int k,int

r)24

32void work(int l,int

r)3342}

4344

intmain()

4563

for(int i=1;i<=len;++i)

6469

int lr=0;70

for(int i=1;i<=2*len;++i)

7180

else

8185

//printf("bl=%d rl=%d\n",blcnt[i],rlcnt[i]);86}

87int rr=0;88

for(int i=2*len;i>=1;--i)

8998

else

99103

}104

for(int i=1;i<=len-1;++i)

105108 printf("

%d\n

",minn);

109}

110}

111/*

1129

113brrrbrrrbbrbbr

114rrrrrbrrrrrbbrr

115*/

view code

100分**

滿足性質區間向右移最優斷點向右移或不變

看過znn的部落格受到啟發

然後o(n)列舉區間,指標移動最優斷點即可

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include8 #include9 #include10

#define ps push_back

11#define maxn 2005101

12#define ll long long

13using

namespace

std;

14ll t;

15char

c[maxn];

16ll a[maxn];

17ll len;

18ll minn;ll zh;

19ll sum1,sum2;

20ll sum_lb[maxn],sum_rb[maxn];

21ll blcnt[maxn],brcnt[maxn],rrcnt[maxn],rlcnt[maxn];

22ll getsum(ll l,ll k,ll r)

2329

intmain()

3046

for(ll i=1;i<=len;++i)

4752 ll lr=0;53

for(ll i=1;i<=2*len;++i)

5462

else

6367

}68 ll rr=0;69

for(ll i=2*len;i>=1;--i)

7078

else

7983

}84 ll ans=0

;85 zh=(rlcnt[len]+1)/2;86

for(ll i=1;i<=len;++i)

8793

}94 ans=getsum(1

,zh,len);

95//

printf("aa%lld %lld\n",getsum(1,zh,len),zh);

96 ans=min(ans,minn);

97for(ll i=1;i<=len;++i)

98110

//printf("ans=%lld\n",ans);

111}

112 minn=min(ans,minn);

113}

114//

printf("%lld\n",minn);

115 printf("

%lld\n

",minn);

116}

117}

118/*

1199

120brrrbrrrbbrbbr

121rrrrrbrrrrrbbrr

122*/

view code

light題目講解 7 25模擬賽T1

心得 這一道題其實就是自己打暴力打出來的 沒有想到正解真的就是暴力列舉 我的做法是這樣的 就是列舉a字串中長度為x的子串 看它是不是b串的子串行 接下來是我的絕望考試 100分ac light 這一道題我個人的思路就是二分答案 暴力 include using namespace std strin...

壽司晚宴(dinner)

時間限制 1 sec 記憶體限制 512 mb 題目描述 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i ...

心得 暑假7 25

最近學了很多新知識 學的莫隊可以離線處理多個區間詢問,規模1e5可以放心 然而打錯的莫對 或是忘記sort 確實比不上n2暴力 最後一道permu貌似有其他打法1k ms,然而這道題其實和很久之前的考試題旅店異曲同工,我用權值線段樹維護莫隊的區間內連續的01串,查詢時直接查詢整個線段樹的最大值即為當...