ROUND 4の NEERC Eastern Subregional2011
来源:互联网 发布:淘宝上靠谱的法国代购 编辑:程序博客网 时间:2024/05/20 16:12
A:Passenger Comfort
分析:这种题目要想好:问你最大和最小的速度,我们分两种情况:1:h>x*t 这时候临界条件无法到达h,我们求最小时间肯定跑最大速度,所以最小的时间设为y,有vy+x(t-y)=h,最大肯定是t,2:h<=x*t时最小时间还是跑最大速度为tmin=h/v,最大时间跑临界速度,tmax=h/x;
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<set>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int INF=0x3f3f3f3f;#define push_back pbtypedef long long LL;int h,t,v,x;int main(){ while(~scanf("%d%d%d%d",&h,&t,&v,&x)) { double mi,mx; if(h>x*t) { mi=(h-x*t)*1.0/(v-x); mx=t; } else { mi=0; mx=h*1.0/x; } printf("%.8f %.8f\n",mi,mx); } return 0;}
C:Frequent Flyer Card
分析:首先我们根据题意要求出最后每个数字的概率p[i],那么我们求到每个概率之后
应该求得到0~9牌的期望.dp[st]=(dp[st]p[st]+dp[s']p[s']+dp[s'']p[s'']....)+1--->(1-p[st])dp[st]=s+1
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<set>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int INF=0x3f3f3f3f;typedef long long LL;const int maxn=(1e5+100)*2;int a[30],b[30],c[30];int num[30];double p[30],dp[30][30],d[1100];int n;double dfs(int st){ if(st==1024-1) return 0; if(d[st]!=-1) return d[st]; double s1=0,s2=0; for(int i=0;i<10;i++) { if(st&(1<<i)) s1+=p[i]; else s2+=p[i]*dfs(st|(1<<i)); } return d[st]=(s2+1)/(1-s1);}int main(){ while(~scanf("%d",&n)) { REPF(i,1,n) scanf("%d",&a[i]); REPF(i,1,n) scanf("%d",&b[i]); REPF(i,1,n) scanf("%d",&c[i]); CLEAR(dp,0);dp[0][1]=1; for(int i=1;i<=n;i++) { CLEAR(num,0); for(int j=0;j<10;j++) num[(j*j*a[i]+b[i]*j+c[i])%11]++; for(int j=0;j<11;j++) for(int k=0;k<11;k++) dp[i][(j*k)%11]+=dp[i-1][k]*num[j]/10; } dp[n][0]+=dp[n][10]; int flag=1; for(int i=0;i<10;i++) { if(dp[n][i]<1e-10) flag=0; p[i]=dp[n][i]; } for(int i=0;i<(1<<10);i++) d[i]=-1; if(!flag) puts("-1"); else printf("%.8f\n",dfs(0)); } return 0;}
E:Airport Announcements
分析:直接map暴力一下就好了复杂度O(N^2)
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<set>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int INF=0x3f3f3f3f;#define push_back pbtypedef long long LL;char str[1010][25];map<string,int>mp;int st[1010],vis[1010];int ans[1010];int main(){ int n;char temp[25]; while(~scanf("%d",&n)) { mp.clear(); int tot=1; REPF(i,1,n) { scanf("%s",str[i]); if(strcmp(str[i],"unknown")==0) continue; if(!mp[str[i]]) mp[str[i]]=tot++; st[mp[str[i]]]=i; } int c=0; for(int i=1;i<=n;i++) { if(n%i!=0) continue; int flag=1; CLEAR(vis,0); for(int j=1;j<=n;j+=i) { int cnt=0; for(int k=j;k<j+i;k++) { if(strcmp(str[k],"unknown")!=0&&!vis[mp[str[k]]]) { cnt++; strcpy(temp,str[k]); vis[mp[str[k]]]=1; } } if(cnt==0||(cnt==1&&st[mp[temp]]<j+i)) vis[mp[temp]]=1; else { flag=0; break; } } if(flag) ans[c++]=n/i; } sort(ans,ans+c); if(c==0) puts("Igor is wrong."); else { for(int i=0;i<c;i++) printf(i==c-1?"%d\n":"%d ",ans[i]); } }}
F:Money out of Thin Air
分析:做一下DFS序,然后线段树搞一下就行了,比赛的时候线段树一个地方错了,坑了整场
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<set>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int INF=0x3f3f3f3f;#define push_back pbtypedef long long LL;const int maxn=(1e5+100)*2;LL add[maxn<<2];LL sum[maxn<<2];int n,m,tot;struct node{ int to,next;}e[maxn<<2];int head[maxn],dfn;LL val[maxn],C[maxn];int L[maxn],R[maxn];void addedge(int u,int v){ e[tot].to=v;e[tot].next=head[u]; head[u]=tot++;}void dfs(int u){ L[u]=++dfn; for(int i=head[u];i!=-1;i=e[i].next) { int to=e[i].to; dfs(to); } R[u]=dfn;}void pushdown(int rs,int s){ if(add[rs]) { add[rs<<1]+=add[rs]; add[rs<<1|1]+=add[rs]; sum[rs<<1]+=add[rs]*(s-(s>>1)); sum[rs<<1|1]+=add[rs]*(s>>1); add[rs]=0; }}void pushup(int rs){ sum[rs]=sum[rs<<1]+sum[rs<<1|1];}void build(int rs,int l,int r){ add[rs]=sum[rs]=0; if(l==r) { sum[rs]=val[l]; return ; } int mid=(l+r)>>1; build(rs<<1,l,mid); build(rs<<1|1,mid+1,r); pushup(rs);}void update(int x,int y,LL c,int l,int r,int rs){ if(l>=x&&r<=y) { sum[rs]+=c*(LL)(r-l+1); add[rs]+=c; return ; } int mid=(l+r)>>1; pushdown(rs,r-l+1); if(x<=mid) update(x,y,c,l,mid,rs<<1); if(y>mid) update(x,y,c,mid+1,r,rs<<1|1); pushup(rs);}LL query(int x,int y,int l,int r,int rs){ if(l>=x&&r<=y) return sum[rs]; int mid=(l+r)>>1; pushdown(rs,r-l+1); LL res=0; if(x<=mid) res+=query(x,y,l,mid,rs<<1); if(y>mid) res+=query(x,y,mid+1,r,rs<<1|1); return res;}int main(){ int x; LL w,y; char str[20]; while(~scanf("%d%d%I64d",&n,&m,&w)) { tot=0; dfn=0; CLEAR(head,-1); C[1]=w; REPF(i,2,n) { scanf("%d%d",&x,&w); x++;C[i]=(LL)w; addedge(x,i); } dfs(1); build(1,1,n); for(int i=1;i<=n;i++) update(L[i],L[i],C[i],1,n,1); while(m--) { scanf("%s%d%I64d%I64d",str,&x,&y,&w); x++; if(str[0]=='e') { if(query(L[x],L[x],1,n,1)<y) update(L[x],L[x],w,1,n,1); } else { if(query(L[x],R[x],1,n,1)<(LL)y*(R[x]-L[x]+1)) update(L[x],R[x],w,1,n,1); } } for(int i=1;i<=n;i++) printf("%I64d\n",query(L[i],L[i],1,n,1)); } return 0;}/*4 3 10 100 101 10employee 2 15 1employee 3 5 100department 0 10 1000000*/
I:A380
分析:签到模拟
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<set>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int INF=0x3f3f3f3f;#define push_back pbtypedef long long LL;char str[110];int main(){ int x;char op; while(~scanf("%s",str)) { x=0; int len=strlen(str); for(int i=0;i<len;i++) { if(isdigit(str[i])) { for(int j=i;j<len;j++) { if(!isdigit(str[j])) { op=str[j]; break; } x=x*10+str[j]-'0'; } break; } } //cout<<"fuck "<<x<<" "<<op<<endl; int c; if(x>=1&&x<=2) { if(op=='A'||op=='D') c=1; else c=2; } else if(x>=3&&x<=20) { if(op=='A'||op=='F') c=1; else if(op=='B'||op=='C'||op=='D'||op=='E') c=2; else c=3; } else { if(op=='A'||op=='K') c=1; else if(op=='C'||op=='D'||op=='G'||op=='H') c=2; else c=3; } if(c==1) puts("window"); else if(c==2) puts("aisle"); else puts("neither"); }}
0 0
- ROUND 4の NEERC Eastern Subregional2011
- ROUND 3の 2013 :: NEERC Eastern Subregional
- NEERC 2010, Eastern subregional contest
- Airport Announcements(NEERC 2011 Eastern Subregional)
- NEERC 2014, Eastern subregional contest 题解
- NEERC 2014, Eastern subregional contest(汇总)
- ACM ICPC 2013-2014. NEERC. Eastern Subregional Contest
- 2013-2014 ACM-ICPC, NEERC, Eastern Subregional Contest H:Those are not the droids you're looking for
- UVA 1339 Ancient Cipher古老的密码【NEERC 2004】【刘汝佳紫书4-1】
- NEERC 2008 Aerodynamics
- graveyard,neerc(墓地雕塑)
- neerc-2013-Green Energy
- NEERC 2014 题解(待续)
- 10.21【Codeforces NEERC 胡玩记】
- Adobe Photoshop CS2 ME (Middle Eastern) v9.0.1
- October 23, 2013 - Fires and smoke in eastern China
- ACM ICPCNEERC. Eastern Subregional Contest Donald is a postman
- NEERC 2005 Feel Good (Poj2976)
- HDU 4985/BC 7A Little Pony and Permutation
- HDOJ1874 畅通工程续(floyd)
- 数学(转)
- 所发生的发生的
- 程序中文乱码问题解决大全
- ROUND 4の NEERC Eastern Subregional2011
- MySQL的myisam引擎表锁优化
- SPICE协议在Android上的几个优化要点
- python下载hadoop天气数据
- Android蓝牙开发
- adb常用命令总结
- 空格替换
- 排序算法的C语言实现-快速排序
- hdu 5358(尺取法)