2017 ACM-ICPC ECL-FINAL 部分代码
2017-12-18 15:06
555 查看
以下代码均为现场代码,注释不存在的
A
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; ll power(ll n,ll p){ ll ans=1; ll base=n; while(p){ if(p&1){ ans=ans*base%mod; } base=base*base%mod; p>>=1; } return ans; } ll inv(ll n){ return power(n,mod-2); } int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ ll n,k; scanf("%lld%lld",&n,&k); //cout<<power(2,6)<<endl; ll sum=(power(2,n)-1+mod)%mod; ll up=1,down=1; //cout<<sum<<endl; for(ll i=1;i<k&&i<=n;i++){ up=up*(n-i+1)%mod; down=down*i%mod; //cout<<up<<' '<<down<<endl; sum=(sum-up*inv(down))%mod; sum=(sum+mod)%mod; } printf("Case #%d: %lld\n",tt,sum); } }
B
#include<bits/stdc++.h> using namespace std; const int maxn = 200005; double X; struct P{ int sz,cnt; double cc; bool operator<(const P &p)const{ return cc < p.cc; } }; int A[maxn]; double cal(double a,double b){ return b * ((a / b - X ) * (a / b - X )) - (b + 1)*(a/(b+1) - X) * (a/(b+1) - X); //return tmp * tmp; } priority_queue<P> que; int main(){ //sint tmp = (1LL<<31)-1; //cout<<tmp<<endl; int T; scanf("%d",&T); int cs = 0; while(T--){ int n,m; scanf("%d%d",&n,&m); while(!que.empty()) que.pop(); int sum = 0; for(int i = 1;i<=n;i++){ scanf("%d",&A[i]); sum += A[i]; } X = sum * 1.0 / m; for(int i = 1;i<=n;i++){ que.push((P){A[i],1,cal(A[i],1)}); } for(int i = n+1;i<=m;i++){ P p = que.top();que.pop(); p.cnt++; p.cc = cal(p.sz,p.cnt); que.push(p); } double ans = 0; while(!que.empty()){ P p = que.top();que.pop(); ans += 1.0 * p.cnt * (1.0 * p.sz/p.cnt - X) * (1.0 * p.sz/p.cnt - X); } printf("Case #%d: %.10lf\n",++cs,ans/m); } }
C
#include <bits/stdc++.h> using namespace std; int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ int n; scanf("%d",&n); double sum=0,tmp=0; for(int i=1;i<=n+1;i++){ scanf("%lf",&tmp); sum+=tmp; } double M=0; for(int i=1;i<=n;i++){ double a,b; scanf("%lf%lf",&a,&b); M=max(M,b); } sum+=M; printf("Case #%d: %.10f\n",tt,sum); } }
D
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll ans[2000005]; int tot=0; // p fz, q fm ll tt[105]; ll le[105]; inline ll getlen(ll x){ ll ret = 1; while(x){ ret*=10; x/=10; } return ret; } ll get(ll a,ll p,ll q,int len){ ll tmp=a; ll x = a; tt[0] = a; le[0] = getlen(tt[0]); for(ll i=1;i<len;i++){ if(tmp%q)return 1e15+1; tmp /= q; x /= q; if(x > 1e15 / p) return 1e15+1; x *= p; tt[i] = x; le[i] = getlen(tt[i]); } ll ret = 0; for(int i = 0;i<len;i++){ //cout<<tt[i]<<' '<<le[i]<<endl; if(ret > 1e15 / le[i]) return 1e15+1; ret *= le[i]; ret += tt[i]; } return ret; } bool flag = 0 ; void solve(ll a,ll q){ for(ll p=q+1;;p++){ if(get(a,p,q,3)>1e15)break; for(int j=3;;j++){ ll tmp=get(a,p,q,j); if(tmp>1e15)break; /*if(tmp < 0){ //cout<<a<<' '<<p<<' '<<q<<' '<<j<<endl; //flag = 1; //return; }*/ ans[++tot]=tmp; } } } ll Ans[2000005]; int main(){ for(ll i=1;i<100000;i++){ for(ll j=1;j*j<=i;j++){ if(i%(j*j)==0){ solve(i,j); //if(flag) return 0; } } } //cout<<get(1,1,2,4)<<endl; //cout<<tot<<endl; sort(ans+1,ans+tot+1); //tot = unique(ans+1,ans+tot+1)-ans; int tot1 = 0; for(int i = 1;i<=tot;i++) if(ans[i]!=ans[i-1]) Ans[++tot1] = ans[i]; //cout<<tot<<endl; //cout<<tot1<<endl; //for(int i = tot1;i>tot1-10;i--) // cout<<Ans[i]<<endl; //cout<<get(1024,1,2,5); //for(int i = 0;i<10;i++) // cout<<tt[i]<<endl; int T; scanf("%d",&T); int cs = 0; while(T--){ ll l,r; scanf("%lld%lld",&l,&r); int rr = upper_bound(Ans+1,Ans+tot1+1,r) - Ans - 1; int ll = upper_bound(Ans+1,Ans+tot1+1,l-1) - Ans - 1; printf("Case #%d: %d\n",++cs,rr-ll); } }
H
#include <bits/stdc++.h> using namespace std; char s[1000003]; char s1[1000003]; int dp[1000003][2]; int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ scanf("%s",s+1); int a,b; scanf("%d%d",&a,&b); memset(dp,-1,sizeof(dp)); int n=strlen(s+1); for(int i=1;i<=n;i++){ if(s[i]=='a'||s[i]=='e'||s[i]=='o'||s[i]=='i'||s[i]=='u')s[i]='0'; else if(s[i]!='?')s[i]='1'; } dp[0][0]=dp[0][1]=0; for(int i=1;i<=n;i++){ if(s[i]=='?'){ if(dp[i-1][1]!=-1){ dp[i][0]=1; } else if(dp[i-1][0]!=-1){ dp[i][0]=dp[i-1][0]+1; } if(dp[i][0]>=a)dp[i][0]=-1; if(dp[i-1][0]!=-1){ dp[i][1]=1; } else if(dp[i-1][1]!=-1){ dp[i][1]=dp[i-1][1]+1; } if(dp[i][1]>=b)dp[i][1]=-1; } else if(s[i]=='0'){ if(dp[i-1][1]!=-1){ dp[i][0]=1; } else if(dp[i-1][0]!=-1){ dp[i][0]=dp[i-1][0]+1; } if(dp[i][0]>=a)dp[i][0]=-1; } else { if(dp[i-1][0]!=-1){ dp[i][1]=1; } else if(dp[i-1][1]!=-1){ dp[i][1]=dp dcc0 [i-1][1]+1; } if(dp[i][1]>=b)dp[i][1]=-1; } } bool tag1=false; if(dp [0]!=-1||dp [1]!=-1)tag1=true; bool tag2=false; int tmp=0; //cout<<s+1<<endl; for(int i=1;i<=n;i++){ if(s[i]=='?')s1[i]='0'; else s1[i]=s[i]; if(s1[i]=='0')tmp++; else { tmp=0; } if(tmp>=a)tag2=true; } tmp=0; for(int i=1;i<=n;i++){ if(s[i]=='?')s1[i]='1'; else s1[i]=s[i]; if(s1[i]=='1')tmp++; else { tmp=0; } if(tmp>=b)tag2=true; } //cout<<tag1<<' '<<tag2<<endl; if(tag1&&tag2)printf("Case #%d: SURPRISE\n",tt); else if(tag1){ printf("Case #%d: LIKE\n",tt); } else if(tag2){ printf("Case #%d: DISLIKE\n",tt); } } }
J
#include <bits/stdc++.h> using namespace std; typedef long long ll; deque<ll>dq; ll a[200003]; int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ int n; scanf("%d",&n); while(!dq.empty())dq.pop_back(); bool flag=true; ll k=0; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } a[++n]=0; for(int i=1;i<=n;i++){ if(dq.empty()){ dq.push_back(a[i]); continue; } while(k+a[i]<dq.back()){ if(dq.size()<=2){ flag=false; break; } if(dq.front()+a[i]<dq.back()){ k=dq.front(); } else { k=dq.back()-a[i]; } while(!dq.empty()&&dq.front()==k)dq.pop_front(); } if(!flag)break; dq.push_back(k+a[i]); if(a[i]==0){ while(!dq.empty())dq.pop_back(); k=0; } //cout<<k<<endl; } if(!flag)printf("Case #%d: No\n",tt); else printf("Case #%d: Yes\n",tt); } }
K
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll l[105000]; ll pre[105000]; int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ ll A,b,n,a; scanf("%lld%lld%lld",&a,&b,&n); A=a; for(int i=1;i<=A;i++){ scanf("%lld",&l[i]); pre[i]=pre[i-1]+l[i]; } for(int i=1;i<=n;i++){ ll pos=lower_bound(pre+1,pre+1+A,a)-pre; ll ap=pos; ll bp=a-pre[pos-1]; //cout<<a<<' '<<b<<endl; if(ap==a&&bp==b)break; a=ap,b=bp; } printf("Case #%d: %lld-%lld\n",tt,a,b); } }
L的代码找不到了,结论是大于等于7的奇数先手赢,大于等于16的偶数后手赢,其余平。
M
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll p[5]; ll v[5]; int main(){ int T; scanf("%d",&T); for(int tt=1;tt<=T;tt++){ for(int i=0;i<5;i++)scanf("%lld",&v[i]); p[0]=48; p[1]=p[0]+8; p[2]=p[1]+4; p[3]=p[2]+2; p[4]=p[3]+1; int num; scanf("%d",&num); ll ans=0; for(int i=1;i<=num;i++){ int id; scanf("%d",&id); for(int j=0;j<5;j++){ if(id<=p[j]){ ans+=v[j]; break; } } } printf("Case #%d: %lld\n",tt,ans*10000); } }
相关文章推荐
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-总结及部分代码
- 2015 SWJTU ACM Summer Training Final Assessment 1st 部分题解
- hdu acm暑期集训 第一场(附部分考场原生代码)
- HDU-2017中国大学生程序设计竞赛-网络选拔赛-部分题解及代码
- 解决VS 2017 TFS获取部分代码为空,状态为黄色感叹号
- 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
- 2013-2017 ACM/ICPC 区域赛&final 水题和铜牌题
- 2016-2017 ACM-ICPC CHINA-Final H Great Cells ans[i]*i看做整体,转化为期望理解来解题
- ACM数论部分知识详解与代码分析1
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
- 2016-2017 ACM-ICPC CHINA-Final (慢慢做慢慢更新)
- 2017 ACM/ICPC EC Final 参赛感受
- 【FAKE-ACM】【单刷口胡】2017-CCPC-FINAL
- 【FAKE-ACM】2017-CCPC-FINAL泛刷总结
- Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest【8/13】
- Gym 101243 (2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest)
- 2017ACM/ICPC亚洲区沈阳站(部分解题报告)
- 2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) 部分题/平衡树/最小环/思路bfs
- CF - gym - Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest --- G
- Gym - 101194F Mr. Panda and Fantastic Beasts [2016-2017 ACM-ICPC CHINA-Final] [后缀数组]