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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AtCoder Regular Contest 058

發布時間:2024/1/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AtCoder Regular Contest 058 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個應該是第一場有英文的atcoder吧??不過題解卻沒有英文的。。。
從前往后慢慢做。。。

C こだわり者いろはちゃん / Iroha's Obsession

數據范圍這么小,直接暴力

#include <bits/stdc++.h> using namespace std;bool rec[10];bool check(int num) {while(num){if(rec[num%10]) return false;num /= 10;}return true; }int main() {int n,k,num;cin >> n >> k;for(int i = 0; i < k; ++i){cin >> num;rec[num] = true;}while(true){if(check(n)){cout << n << endl;break;}++n;}return 0; }

D - いろはちゃんとマス目 / Iroha and a Grid

在H * W的矩陣中,左下角有一個A * B的矩陣不能走,求左上角走到右下角方法數。
建議一道題: 51nod 1486 大大走格子
這題容斥原理,比上邊那個題簡單。沒有障礙時,總方法數是C(H+W-2,H-1)總方法數
求出來所有走過障礙處的走法, 用總的減掉就好了。
走過障礙處的方法數就是走到A*B矩陣上方一行的時候,選擇向下走,就是非法的。減掉這些就好。

#include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 100010; const LL mod = 1e9+7; typedef long long LL; LL H,W,A,B; LL fac[MAXN*2],inv[MAXN*2];LL modPow(LL a, LL b) {LL ret = 1;while(b){if(b&1) ret = ret*a%mod;a = a*a%mod;b >>= 1;}return ret; }void init() {fac[0] = 1;inv[0] = 1;for(LL i = 1; i <= H+W; ++i)fac[i] = fac[i-1]*i%mod;inv[H+W] = modPow(fac[H+W],mod-2);for(LL i = H+W-1; i >= 1; --i)inv[i] = (inv[i+1]*(i+1))%mod; }LL C(LL n, LL m) {LL ret = (fac[n]*inv[m]%mod)*inv[n-m]%mod;return ret; }int main() {cin >> H >> W >> A >> B;init();LL res = C(H+W-2,H-1);LL minu = 0;for(int i = 1; i <= B; ++i)minu = (minu + C(H-A+i-2, H-A-1)*C(A+W-i+1-2,A-1)%mod)%mod;cout << ((res-minu)%mod+mod)%mod << endl;return 0; }

E - 和風いろはちゃん / Iroha and Haiku

沒有找到英文題解和中文題解。。。。。
這個題,感覺有點難。起初思路是算組合數,畢竟數據范圍很小,算出1-7的拆分數的每種情況,然后算組合數和排列唄。
算了好久,不知道哪里錯了,看了http://imulan.hatenablog.jp/entry/2016/07/24/233524這個題解,才發現有地方重復計算了。
然后又看了https://kimiyuki.net/blog/2016/07/23/arc-058-e/這個題解,還有官方題解,理解的模模糊糊。
比如說1用1表示,2用10表示,3用100表示,即i用(1<<(i-1))表示。
在這里是計算出不合法的數量,總數量-不合法數量=結果。
比如說要的X,Y,Z是5,7,5,表示這個結果的狀態就是10000100000010000。
然后枚舉每種情況。。。
還是有點懵。。。路過的大佬求解答。。
感覺日語翻譯成英語比翻譯成漢語讀著順一點。。

#include <cstdio> #include <vector> #include <iostream> typedef long long ll; using namespace std; const int mod = 1e9+7; ll dp[41][1<<18]; int main() {int n, x, y, z;scanf("%d%d%d%d", &n, &x, &y, &z);int l = x+y+z-1;int mask = (1<<l)-1;int limit = (1<<l);int ok = (1 << (x+y+z-1)) | (1 << (y+z-1)) | (1 << (z-1));dp[0][0] = 1;for(int i = 0; i < n; ++i){for(int s = 0; s < limit; ++s){for(int a = 1; a < 11; ++a){int t = (s << a) | (1 << (a-1));if ((ok&t) == ok) continue;//舊的狀態向新的狀態轉移(dp[i+1][t & mask] += dp[i][s]) %= mod;}}}ll ans = 1;for(int i = 0; i < n; ++i)ans = ans * 10 % mod;//去掉每種狀態的不合法數量for(int s = 0; s < limit; ++s)ans -= dp[n][s];ans = (ans % mod + mod) % mod;printf("%lld\n", ans);return 0; }

F - 文字列大好きいろはちゃん / Iroha Loves Strings

------不會

轉載于:https://www.cnblogs.com/guoyongheng/p/7841048.html

總結

以上是生活随笔為你收集整理的AtCoder Regular Contest 058的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。