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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HHKB Programming Contest 2020 总结

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HHKB Programming Contest 2020 总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A - Keyboard

簽到題1

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; int main() {IO;int T=1;//cin>>T;while(T--){char x,y;cin>>x>>y;if(x=='Y') cout<<char(y-32)<<'\n';else cout<<y<<'\n';}return 0;}

B - Futon

對于每個.我們只考慮向右和向下能不能放置即可,這樣計數不會重復。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=110; char g[N][N]; int n,m; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>g[i]+1;int res=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(g[i][j]=='#') continue;if(i<n&&g[i+1][j]=='.') res++;if(j<m&&g[i][j+1]=='.') res++;}cout<<res<<'\n';}return 0;}

C - Neq Min

維護一個cnt[]和當前答案res,來一個數就添加一個數,答案掃描cnt[]數組即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=200010; int a[N],n; int cnt[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int res=0;for(int i=1;i<=n;i++){cnt[a[i]]++;while(cnt[res]) res++;cout<<res<<'\n';}}return 0; }

D - Squares

大佬題解
方法非常巧妙投影,舉體解釋可以參考上述題解。

如果兩個正方形在二維平面內相交,那么將兩個正方形投影到x軸上會出現兩條線段,這兩條線段一定相交,同理投影到y軸也一定相交。

由上述性質不難看出我們只需要計算兩條線段相交或者不相交的方案數,這個是非常容易的可以參考上述題解的方法。

那么最后答案一定是:X軸不相交的方案數(Y軸隨意)++ X軸相交但是Y不相交的方案數
或者是:總方案數?-?X軸相交且Y軸相交的方案數

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int mod=1e9+7; int main() {IO;int T=1;cin>>T;while(T--){ll n,a,b;cin>>n>>a>>b;ll res=0;ll d=n-a-b;if(d>=0){ll x=(d+1)*(d+2)%mod;ll y=n-a+1;ll z=n-b+1;res=2*x*y%mod*z%mod-x*x%mod;res=(res%mod+mod)%mod;}cout<<res<<'\n';}return 0; }

D題非常數學,當時這個投影的方法還是非常巧妙的,學習了

E - Lamps

剛開始TLE了,做了個預處理就A了
會做F題不會D的菜雞

不難想到要單獨考慮每一個.點最答案的貢獻

不妨設.的數量是cnt
如果g[i][j]=='.'那么考慮什么情況下對答案有貢獻?如果能夠點亮該點的點數量是w那么最終這個點對答案的貢獻即是(2w?1)2cnt?w(2^w-1)2^{cnt-w}(2w?1)2cnt?w,只要能點亮該點的一個點點亮即可,不能控制該點的隨意。

然后預處理每個點能由多少個點點亮即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=2010; const ll mod=1e9+7; char g[N][N]; int n,m; ll base[N*N]; int w[N][N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>g[i]+1;int cnt=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) cnt+=(int)g[i][j]=='.';base[0]=1;for(int i=1;i<=cnt;i++) base[i]=base[i-1]*2%mod;// 預處理數組for(int i=1;i<=n;i++){int j=1;while(j<=m){while(g[i][j]=='#') j++;int now=1,k=1;while(j+k<=m&&g[i][j+k]=='.') now++,k++;for(int p=j;p<j+k;p++) w[i][p]+=now;j=j+k;}}for(int i=1;i<=m;i++){int j=1;while(j<=n){while(g[j][i]=='#') j++;int now=1,k=1;while(j+k<=n&&g[j+k][i]=='.') now++,k++;for(int p=j;p<j+k;p++) w[p][i]+=now;j=j+k;}}// 計算答案ll res=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(g[i][j]=='#') continue;int now=w[i][j]-1;res=(res+(base[now]-1)*base[cnt-now]%mod)%mod;}}cout<<(ll)(res+mod)%mod<<'\n';}return 0; }

F可能會補~~~
要加喲哦

總結

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

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