Weekly Training Farm 23

来源:互联网 发布:腾讯软件中心官方网站 编辑:程序博客网 时间:2024/06/05 06:07

比赛链接:Weekly Training Farm 23

A:优先队列乱搞:

#include<bits\stdc++.h>using namespace std;typedef long long ll;struct cmp{bool operator () (const ll a,const ll b){return a>b;}};int main(){int n;while(cin>>n){priority_queue<ll,vector<ll>,cmp> q;ll sum=0,t;int ans=0;for(int i=0;i<n;i++){cin>>t;sum+=t;if(t<0)q.push(t);if(sum<0){ll tmp=q.top();q.pop();ans++;sum-=tmp;}}cout<<ans<<endl;}return 0;}


B:二分检验

#include<bits/stdc++.h>using namespace std;typedef long long ll;double a[1007];int n;double x;bool check(double t){double res=0;for(int i=0;i<n;i++){if(t<a[i])res+=a[i]-t;}return res>=x;}int main(){while(cin>>n){double l=0,r=0;for(int i=0;i<n;i++)cin>>a[i],r=max(r,a[i]);cin>>x;int cnt=5;while(r-l>=1e-13){double mid=(r+l)/2;if(check(mid))l=mid;else r=mid;}printf("%.15lf\n",r);}return 0;}


C:简单dp,dp[i][j]表示第i位,数字填j时有多少种方案。状态转移非常容易。。

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+7;const ll mod=1e9+7;ll dp[maxn][10];int main(){ios::sync_with_stdio(false);string s;while(cin>>s){memset(dp,0,sizeof(dp));if(s[0]=='?')for(int i=0;i<=9;i++)dp[0][i]=1;else dp[0][s[0]-'0']=1;for(int i=1;i<s.length();i++)for(int j=(s[i]=='?'?0:s[i]-'0');j<=(s[i]=='?'?9:s[i]-'0');j++)for(int k=0;k<=j;k++)dp[i][j]=(dp[i-1][k]+dp[i][j])%mod;ll ans=0;        for(int i=0;i<=9;i++)ans=(ans+dp[s.length()-1][i])%mod;        cout<<ans<<endl;}return 0;}


E:dfs搜一下,若某棵子树是三个结点,那么这三个结点显然是一组,否则dfs返回这课子树的结点数,当一棵子树的结点数大于3时,显然不能合并。

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=3e5+7;vector<int> adj[maxn];bool vis[maxn];int n;bool flag;int dfs(int u){vis[u]=true;int res=1;for(int i=0;i<adj[u].size();i++){int next=adj[u][i];//if(cnt-->0)printf("%d %d\n",u,next);if(vis[next])continue;res+=dfs(next);if(!flag)return flag;}if(res>3){return flag=false;}return res%3;}int main(){ios::sync_with_stdio(false);while(cin>>n){n*=3;for(int i=1;i<=n;i++)adj[i].clear();int u,v;flag=true;for(int i=1;i<n;i++){cin>>u>>v;adj[u].push_back(v);adj[v].push_back(u);}memset(vis,0,sizeof(vis));dfs(1);if(flag)cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;}


0 0
原创粉丝点击