赞
踩
以下所有AC题解程序来自“仙客传奇”团队。
AC的C++语言程序:
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; const int maxn=1e5+10; priority_queue< int,vector<int>,greater<int> > buy,sell; typedef long long ll; //priority_queue 默认从大到小 修改后从小到大 ll val[maxn]; int main() { int n,t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lld",&val[i]); ll ans=0,cnt=0;//tiaixao???? for(int i=0;i<n;i++){ //cout<<ans<<endl; if(buy.size()!=0&&sell.size()!=0&&buy.top()<sell.top()&&sell.top()<val[i]){ ans+=val[i];cnt++; sell.push(val[i]); buy.pop(); } else if(sell.size()!=0&&sell.top()<val[i]){//交换 buy.push(sell.top()); sell.pop(); sell.push(val[i]); ans+=val[i]-2*buy.top(); } else if(buy.size()!=0&&buy.top()<val[i]) { ans+=val[i];cnt++;//cout<<i<<endl; sell.push(val[i]); buy.pop(); } else buy.push(val[i]),ans-=val[i]; } while(buy.size()!=0){ ans+=buy.top(); buy.pop(); } printf("%lld %lld\n",ans,cnt*2); while(!buy.empty()) buy.pop(); while(!sell.empty()) sell.pop(); } return 0; } /* 4 8 1 2 3 4 5 6 7 8 4 1 2 10 9 5 9 5 9 10 5 2 2 1*/
题解链接:
HDU 6439 Congruence equation(莫比乌斯反演)
HDU 6439 2018CCPC网络赛 Congruence equationI(杜教筛 + 莫比乌斯反演 + 伯努利数)
题解链接:
2018中国大学生程序设计竞赛 - 网络选拔赛(hdu6440 Dream)
AC的C++语言程序:
#include<iostream> #include<cmath> using namespace std; const int maxn = 4e4; int main() { // ios::sync_with_stdio(false); // cin.tie(NULL);cout.tie(NULL); int T,n,a; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&a); if(n == 0 || n > 2) printf("-1 -1\n"); else if(n == 1) printf("1 %d\n",a + 1); else if(n == 2) { if(a % 2 == 0) printf("%d %d\n",a * a / 4 - 1, a * a / 4 + 1); else printf("%d %d\n",(a - 1) * (a / 2 + 1),(a - 1) * (a / 2 + 1) + 1); } } return 0; }
题解链接:
HDU 6442 GuGu Convolution(快速幂)
hdu 6442 - 二项式定理
题解链接:
hdu6444(最大子段和+gcd)
hdu 6444 - 最大子段和(单调队列)
题解链接:
HDU 6445(竞赛图 + 网络流)
HDU 6445 2018CCPC网络赛1008 Search for Answer(费用流 + 构图)
AC的C++语言程序:
#include<iostream> #include<cstring> #include<vector> using namespace std; typedef long long ll; const int maxn = 1e5; const int mod = 1e9 + 7; ll fac[maxn + 10],n,sum; struct edge { int u,v; ll w; edge(){} edge(int _u,int _v,ll _w):u(_u),v(_v),w(_w){} }e[maxn + 10]; vector<edge> son[maxn + 10]; int cnt[maxn + 10],vis[maxn + 10]; ll fa[maxn + 10]; void getfac() { fac[0] = fac[1] = 1; for(int i = 2;i <= maxn;++i) fac[i] = (fac[i - 1] * i) % mod; } int dfs(int no) { int cnt = 1; vis[no] = 1; for(int i = 0;i < son[no].size();++i) if(!vis[son[no][i].v]) { int temp = dfs(son[no][i].v); cnt += temp; sum = (sum + ((son[no][i].w * fac[n - 1] * 2ll) % mod * ((n - temp) * temp) % mod)) % mod; } return cnt; } int main() { ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); getfac(); while(cin>>n) { // memset(cnt,0,sizeof(cnt)); memset(vis,0,sizeof(vis)); for(int i = 1;i <= n;++i) son[i].clear(); for(int i = 1;i < n;++i) { int u,v,w; cin>>u>>v>>w; son[u].push_back(edge(u,v,w)); son[v].push_back(edge(v,u,w)); } sum = 0; dfs(1); cout<<sum<<endl; } return 0; }
AC的C++语言程序:
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #define INF 2147483647 #define MEM(x, b) memset(x, b ,sizeof(x)) #define ll long long using namespace std; const int MOD = 1e9 + 7; const int MAXN = 1e5 + 2; int n; vector<pair<int, int> > edge[MAXN]; int num[MAXN]; ll fac[MAXN]; ll ans; void dfs(int crt, int fa){ for (int i = 0; i < edge[crt].size(); i++) { int u = edge[crt][i].first; if (u == fa) continue; dfs(u, crt); num[crt] += num[u]; ans =(ans + 1ll*(num[u]) %MOD * (n - num[u]) % MOD* fac[n - 1] % MOD * 2ll % MOD * edge[crt][i].second % MOD) % MOD; } } int main() { fac[0] = 1; for (int i = 1; i < MAXN; i++) { fac[i] = (fac[i - 1] * (long long)i % MOD) % MOD; } while (~scanf("%d", &n)){ ans = 0; for (int i = 1; i <= n; i++) edge[i].clear(); //MEM(num, 1); for (int i = 1; i<= n; i++) num[i] = 1; for (int i = 1; i < n; i++){ int u , v, w; scanf("%d%d%d",&u,&v,&w); edge[u].push_back(make_pair(v, w)); edge[v].push_back(make_pair(u, w)); } //cout << "ds" << endl; dfs(1, 0); printf("%lld\n", ans); } return 0; }
AC的C++语言程序:
#include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 1e5 + 2; struct node{ int x, y, w; bool operator < (node A) { if (x == A.x) { return y>A.y; }else return x < A.x; } }; node p[MAXN]; int tr[MAXN], a[MAXN]; int n ,tot; int lowbit(int x){ return (x & (-x)); } int query(int l) { int maxn = 0; for (int i = l; i >=1; i-=lowbit(i)){ maxn = max(maxn, tr[i]); } return maxn; } void add(int pos , int val) { tr[pos]= val; for (int i = pos; i <= MAXN; i+= lowbit(i) ){ tr[i] = max(tr[i], val); } } int main() { int t; scanf("%d", &t); while (t--) { memset(tr, 0 ,sizeof(tr)); scanf("%d", &n); for (int i = 0; i < n; i++){ scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].w); a[i] = p[i].y; } sort(a , a + n); tot = unique(a, a + n) - a; for (int i = 0; i < n; i++){ p[i].y = lower_bound(a, a + n, p[i].y) - a + 1; } sort(p, p + n); for (int i = 0; i < n; i++){ int val = query(p[i].y - 1) + p[i].w; add(p[i].y, val); } printf("%d\n", query(MAXN - 1)) ; } }
题解链接:
BEIL 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 Goldbach
ACDIJ 2018中国大学生程序设计竞赛网络选拔赛
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。