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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客练习赛49

發布時間:2024/10/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客练习赛49 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem A?筱瑪愛地理

https://ac.nowcoder.com/acm/contest/946/A

題意:

題解:逆元+排序

C++版本一

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=200000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; struct node{int v,e;bool operator<(const node &S)const{return (double)e/v>(double)S.e/S.v;} }G[N]; ll POW(ll a,ll b=MOD-2,ll c=MOD){ll res=1;ll base=a%c;while(b){if(b&1)res=(res*base)%c;base=(base*base)%c;b>>=1;}return res; } int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&G[i].v,&G[i].e);sort(G+1,G+n+1);for(int i=1;i<=n;i++)cout<<G[i].e*POW(G[i].v)%MOD<<endl;#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }

Problem B?筱瑪愛閱讀

https://ac.nowcoder.com/acm/contest/946/B

題意:

題解:

C++版本一

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100+10; const int M=600000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; int f[1<<15],c[20]; int g[1<<15],sz[1<<15]; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);//while(t--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&c[i]);sum+=c[i];}sort(c+1,c+n+1);for(int i=1;i<=m;++i) {int s=0;scanf("%d",&k);for(int i=1;i<=k;++i)scanf("%d",&p),s|=(1<<(p-1));g[s]=1;}for(int i=1;i<(1<<n);++i) sz[i]=sz[(i-1)&i]+1;for(int i=0;i<(1<<n);++i) {int s=((1<<n)-1)^i;for(int j=s;j;j=(j-1)&s) if(g[j]) {f[i|j]=max(f[i|j],f[i]+c[sz[i]+1]);}}printf("%d\n",sum-f[(1<<n)-1]);//}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }

Problem C?筱瑪愛歷史

https://ac.nowcoder.com/acm/contest/946/C

題意:

題解:

C++版本一

?

Problem D?筱瑪愛線段樹

https://ac.nowcoder.com/acm/contest/946/D

題意:第一種操作對[l,r]區間內每幢房子塞入一個皮卡丘; 第二種操作對第l次到第r次的操作重復一遍。

題解:可以 O(n)維護兩個差分數組,一個是針對重復操作的差分數組,一個是針對當前房子塞入皮卡丘的個數的差分數組。對第二個差分數組的每次修改的大小是當前操作重復操作次數。 因為每一次第二種操作總是針對之前的操作,所以要倒著跑一遍。 最后對針對當前房子塞入皮卡丘的個數的差分數組求個前綴和就好了。

C++版本一

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; ll a[N],pre[N]; char str; struct node{int l,r,op; }e[N]; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);while(~scanf("%d%d",&n,&m)){memset(pre,0,sizeof(pre));memset(a,0,sizeof(a));pre[m+1]++;pre[0]--;for(int i=1;i<=m;i++){scanf("%d%d%d",&e[i].op,&e[i].l,&e[i].r);}for(int i=m;i>=1;i--){pre[i]=(pre[i]+pre[i+1])%MOD;if(e[i].op!=1){pre[e[i].r]=(pre[e[i].r]+pre[i])%MOD;pre[e[i].l-1]=(pre[e[i].l-1]-pre[i]+MOD)%MOD;}else{a[e[i].l]=(a[e[i].l]+pre[i])%MOD;a[e[i].r+1]=(a[e[i].r+1]-pre[i]+MOD)%MOD;//cout<<e[i].l<<" "<<e[i].r<<" "<<pre[i]<<endl;}}for(int i=1;i<=n;i++){a[i]=(a[i]+a[i-1])%MOD;}for(int i=1;i<=n;i++){printf("%lld%c",a[i]," \n"[i==n]);}}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }

Problem E?筱瑪愛游戲

https://ac.nowcoder.com/acm/contest/946/E

題意:
首先,桌面上一共有nn個數。

兩個人輪流從桌面上取走一個數,并把這個數放入集合中。

如果在某次操作結束后,集合中存在一個異或和為00的非空子集,那么進行這次操作的人輸。

如果全部取完,則最后操作的人贏。

題解:線性基

C++版本一

/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; ll a[N]; char str; struct node{}; struct Linear_Basis{ll d[63],p[63],tot;void init(){tot=0;memset(d,0,sizeof(d));memset(p,0,sizeof(p));}bool ins(ll x){for(int i=62;i>=0;i--)if (x&(1ll<<i)){if (!d[i]) {d[i]=x;break;}x^=d[i];}return x>0;} } LB; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);//while(t--){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++){if(LB.ins(a[i]))ans++;}cout<<(ans&1?"First":"Second")<<endl;//}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }

Problem F?筱瑪愛語文

https://ac.nowcoder.com/acm/contest/946/F

題意:

題解:

C++版本一

?

?

總結

以上是生活随笔為你收集整理的牛客练习赛49的全部內容,希望文章能夠幫你解決所遇到的問題。

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