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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

URAL 1830 Help in the RNOS 思路,读题 难度:1

發(fā)布時(shí)間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 URAL 1830 Help in the RNOS 思路,读题 难度:1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://acm.timus.ru/problem.aspx?space=1&num=1830

這道題需要理解題目操作的意思,

要更改第i位的狀態(tài),第i-1位必須激活為1,0-i-2位必須為0,如果0-i-1位開始時(shí)全為0,那么從0位開始進(jìn)行操作

一.首先考慮對于0-i-1位都是0,需要更改i位的情況,需要 1.更改i-1位,2.按一下打開下一頁

對于更改i-1位,需要1.更改i-2位,2.按一下打開下一頁,3.更改i-2位

可以得到一個(gè)式子,設(shè)f[i]為第0-i-1位均為0時(shí),使得狀態(tài)成為第i位被更改,第0-i-1位仍為0的操作數(shù),則f[i]=2*f[i-1]+1

二.因?yàn)閺那巴蟾臅绊懼暗臓顟B(tài),所以我們從后往前更改,當(dāng)最后一個(gè)不相同位置e已被上面的操作更改后,只有e-1位為1,其它都為0,滿足上面的條件,可以直接相加

三.對于更改最后一位e的操作,因?yàn)檫@個(gè)時(shí)候前面不一定全都為0,所以有:

假設(shè)第e位是第i個(gè)1,

對于第i-1個(gè)1,這個(gè)1是有用的,可以作為起點(diǎn),如果它是第j位,它的操作數(shù)為f[j]+1,對于e來說,因?yàn)橛?jì)算f[e]時(shí)認(rèn)為2*f[j]+1,所以要減去f[j],

對于第i-2個(gè)1,這個(gè)1阻礙了第i-1個(gè)1,是無用的,如果它是第j位,它的操作數(shù)為3*f[j]+1(一次關(guān)閉操作),對于e來說,需要加上f[j]

對于第i-3個(gè)1,有用,

對于第i-4個(gè)1,無用........

依次類推,直接相加可得答案

四:注意long long

?

#include <cstdio> #include <cstring> using namespace std; typedef long long ll; char org[100],aim[100]; ll f[50]; int main(){int n;ll ans=0;scanf("%d%s%s",&n,org,aim);f[0]=1;for(int i=1;i<n;i++){f[i]=2*f[i-1]+1;}for(int i=n-1;i>=0;i--){if(org[i]==aim[i])continue;ll sub=0;int fl=1;for(int j=i-1;j>=0;j--){if(org[j]=='1'){sub=sub+f[j]*fl;if(j!=i-1)org[j]='0';fl=-fl;}}if(i>0)org[i-1]='1';ans+=(i>0?f[i-1]:0)-sub+1;org[i]=aim[i];}printf("%I64d\n",ans);return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/xuesu/p/4296895.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的URAL 1830 Help in the RNOS 思路,读题 难度:1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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