1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > cf每日一水(C. Card Game E. The Humanoid )

cf每日一水(C. Card Game E. The Humanoid )

时间:2023-04-27 13:21:39

相关推荐

cf每日一水(C. Card Game    E. The Humanoid    )

传送门:Problem - C - Codeforces

传送门:Problem - E - Codeforces

dp存储迭代传送+打表找规律emmmm

#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>using namespace std;typedef long long ll;typedef pair<ll, ll> PII;int t;ll n,m; ll N=998244353;ll dp[100];void pan(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return;}pan(b,a%b,x,y);ll tmp=x;x=y;y=tmp-(a/b)*y;}ll ni(ll a,ll mod){ll x,y;pan(a,mod,x,y);return (x%mod+mod)%mod;}ll solve(int x,int p){int s=x;ll u=p;ll ans=1;while(u){ans=ans*s%N;ans=ans*ni(u,N)%N;u--;s--;}return ans%N;}int main() {ios::sync_with_stdio(false);cin.tie();cout.tie();cin>>t;dp[2]=1,dp[4]=3;for(int i=6;i<=60;i+=2){dp[i]=(dp[i-4]+solve(i-4,i/2-3)+solve(i-1,i/2-1))%N;}while(t--){cin>>n;if(n==2){printf("1 0 1\n");}else if(n==4){printf("3 2 1\n");}else{ll ans=solve(n,n/2);printf("%lld %lld 1\n",dp[n],(ans-dp[n]-1+N)%N);}}}

这题只能说jiangly佬tql永远的神!!!太nb了!!!之后又看了睿博佬的代码,dfs也很妙,和dp一样

dp==优化的dfs

dp版代码:

#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>using namespace std;typedef long long ll;typedef pair<ll, ll> PII;int t;ll dp[5][5];ll b[200005];int main() {ios::sync_with_stdio(false);cin.tie();cout.tie();cin>>t;while(t--){ll n,m;cin>>n>>m;for(int i=0;i<=2;i++){for(int j=0;j<=2;j++)dp[i][j]=0;}for(int i=1;i<=n;i++)cin>>b[i];dp[2][1]=m;sort(b+1,b+1+n);ll ans=0;for(int i=1;i<=n;i++){for(int x=2;x>=0;x--){for(int y=1;y>=0;y--){if(x)dp[x-1][y]=max(dp[x-1][y],2*dp[x][y]);if(y)dp[x][y-1]=max(dp[x][y-1],3*dp[x][y]);if(dp[x][y]>b[i]){dp[x][y]+=b[i]/2;ans=i;}}}}printf("%lld\n",ans);}}

dfs版:

#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<math.h>#include<vector>#include<map>#include<set>#include<queue>using namespace std;typedef long long ll;typedef pair<ll, ll> PII;int t;ll dp[5][5];ll b[200005];int main() {ios::sync_with_stdio(false);cin.tie();cout.tie();cin>>t;while(t--){ll n,m;cin>>n>>m;for(int i=0;i<=2;i++){for(int j=0;j<=2;j++)dp[i][j]=0;}for(int i=1;i<=n;i++)cin>>b[i];dp[2][1]=m;sort(b+1,b+1+n);ll ans=0;for(int i=1;i<=n;i++){for(int x=2;x>=0;x--){for(int y=1;y>=0;y--){if(x)dp[x-1][y]=max(dp[x-1][y],2*dp[x][y]);if(y)dp[x][y-1]=max(dp[x][y-1],3*dp[x][y]);if(dp[x][y]>b[i]){dp[x][y]+=b[i]/2;ans=i;}}}}printf("%lld\n",ans);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。