很顯然地發現對於某個位置的乙個1或2,它對答案的貢獻與之前進行了多少秒有關,所以趕緊打個表看一看,就發現對於某乙個1來說,它對答案的貢獻就是(t*2+2),t是之前經過的時間,對於2的情況,打出假設輸入的數列是「2」,「02」,「002」,「0002」的表,就發現答案分別是3,9,21,45,93……對這個答案數列做個差分,發現它的差分數列是等比數列,等比數列求和一下就是通項公式,就是3*(2^t-1).
但是想到這裡就不會做了,因為答案太大沒法做,並且t顯然不是取模1e9+7意義下的。
後來我才知道要用指數迴圈節降冪,所以,直接貼一發**(忘記判斷降冪公式條件了,但是還是ac了,懶得加了)。
#include
using
namespace
std;
typedef
long
long ll;
const ll mod=1e9+7;
unordered_map
mp;const
int maxn=100005;
int t;
char s[maxn];
ll phi(ll x)
}if(x>1) ret=ret-ret/x;
return ret;
}ll pow(ll a,ll b,ll c)
return ret;
}ll deal(int cur,ll wtf)
}void init()
int main()
return
0;}
2018牛客多校3
h diff prime pairs 1 3 1 5 1 7 1 11.2 3 2 5 2 7 2 11.3 3 3 5 3 7 3 11.4 3 4 5 4 7 4 11.打個素數表 用素數篩一遍 includeusing namespace std bool a 11111111 int zs ...
2018牛客多校7
有點難度啊。a minimum cost perfect matching 隊友搞的 應該不難 把二進位制寫出來看看 includeusing namespace std define ll long long int define lson rt 1,l,m define rson rt 1 1,...
2018 牛客多校 2
problem a problem b 考慮第二種優惠,每乙個物品如果原價購買了,那麼向可以免費拿的那個物品連一條邊 在樹上被指向的那個點是父親 如果不考慮環的話,考慮樹上dp。設 f i 0 表示買掉以 i 為根的子樹需要的最小花費,設 f i 0 表示買掉以 i 為根的子樹並且 i 這個點是原價...