10.7模拟赛
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll N=51; 5 ll n,m,fac[N]; 6 7 inline ll Calc(ll i,ll j,ll ii,ll jj) { 8 ll res=0; 9 for(ll k=1;k<=i;++k) res=res*10+((k==j)?jj:ii); //,printf("%lld ",res); 10 return res; 11 } 12 13 int main() 14 { 15 freopen("odometer.in","r",stdin); 16 freopen("odometer.out","w",stdout); 17 fac[0]=1; for(ll i=1;i<=16;++i) fac[i]=fac[i-1]*10; 18 scanf("%lld%lld",&n,&m); //printf("%lld %lld\n",n,m); 19 ll ans=0; 20 for(ll i=3,ti=100;ti<=m;++i,ti*=10) { 21 for(ll j=1;j<=i;++j) for(ll ii=0;ii<=9;++ii) for(ll jj=0;jj<=9;++jj) { 22 if(ii==jj || (!jj && j==1) || (!ii && j!=1)) continue; 23 ll t=Calc(i,j,ii,jj); 24 if(t>=n && t<=m) ++ans; 25 // printf("#%lld %lld %lld %lld: %lld: %lld\n",i,j,ii,jj,t,ans); 26 } 27 } 28 printf("%lld\n",ans); 29 return 0; 30 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll N=(1<<20)+11; 5 ll n,sum; 6 double a[N],dp[N]; 7 int main() 8 { 9 freopen("gift.in","r",stdin); 10 freopen("gift.out","w",stdout); 11 scanf("%lld",&n); 12 for(ll i=1,x;i<=n;++i) scanf("%lf%lld",&a[i],&x),sum+=x; 13 printf("%lld\n",sum); 14 dp[(1<<n)-1]=0; 15 for(ll i=(1<<n)-2;i>=0;--i) { 16 double tmp=0.0; 17 for(ll j=0;j<n;++j) if(!((i>>j)&1)) dp[i]+=dp[i^(1<<j)]*a[j+1],tmp+=a[j+1]; 18 dp[i]=(dp[i]+1.0)/tmp; 19 } 20 printf("%.3lf\n",dp[0]); 21 return 0; 22 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=5e4+11,M=1e5+11,inf=0x3f3f3f3f3f3f3f3f; 12 ll n,m; 13 ll fr[M],to[M],nxt[M],w[M],edge,head[N]; 14 ll dfn[N],low[N],tot,top,sta[N],cnt,tag[N]; 15 ll medge,mx[N],my[N],mz[N],dis[N]; 16 bool vis[N]; 17 struct Edge { ll x,y,z; }e[M]; 18 inline void addedge(ll x,ll y,ll z) { ++edge,fr[edge]=x,to[edge]=y,nxt[edge]=head[x],w[edge]=z,head[x]=edge; } 19 20 inline void Init() { 21 edge=cnt=tot=top=cnt=0; 22 memset(fr,0,sizeof(fr)); 23 memset(to,0,sizeof(to)); 24 memset(nxt,0,sizeof(nxt)); 25 memset(w,0,sizeof(w)); 26 memset(head,0,sizeof(head)); 27 memset(dfn,0,sizeof(dfn)); 28 memset(low,0,sizeof(low)); 29 memset(sta,0,sizeof(sta)); 30 memset(vis,false,sizeof(vis)); 31 memset(tag,0,sizeof(tag)); 32 memset(dis,0,sizeof(dis)); 33 } 34 inline void initm() { 35 medge=0; 36 memset(mx,0,sizeof(mx)); 37 memset(my,0,sizeof(my)); 38 memset(mz,0,sizeof(mz)); 39 } 40 inline void inite() { 41 edge=0; 42 memset(head,0,sizeof(head)); 43 memset(fr,0,sizeof(fr)); 44 memset(to,0,sizeof(to)); 45 memset(nxt,0,sizeof(nxt)); 46 memset(w,0,sizeof(w)); 47 } 48 49 void tarjan(int d) { 50 dfn[d]=low[d]=++tot,sta[++top]=d,vis[d]=true; 51 for(int i=head[d],u;i;i=nxt[i]) { 52 u=to[i]; 53 if(!dfn[u]) tarjan(u),low[d]=min(low[d],low[u]); 54 else if(vis[u]) low[d]=min(low[d],dfn[u]); 55 } 56 if(low[d]!=dfn[d]) return ; 57 tag[d]=++cnt; 58 while(sta[top]!=d) tag[sta[top]]=cnt,vis[sta[top]]=false,--top; 59 vis[d]=false,--top; 60 } 61 inline void Rebuild() { 62 initm(); 63 for(ll i=1;i<=m;++i) { 64 ll fx=tag[fr[i]],fy=tag[to[i]]; 65 if(fx!=fy) ++medge,mx[medge]=fx,my[medge]=fy,mz[medge]=w[i]; 66 } 67 inite(); 68 for(ll i=1;i<=medge;++i) addedge(mx[i],my[i],mz[i]); 69 } 70 71 inline void Solve(ll d) { 72 memset(dis,0x3f,sizeof(dis)); dis[d]=0; ll ans=0; 73 for(ll i=1;i<=cnt;++i) for(ll j=head[i];j;j=nxt[j]) dis[to[j]]=min(dis[to[j]],w[j]); //,printf("edge: %lld %lld\n",fr[i],to[i]); 74 for(ll i=1;i<=cnt;++i) if(i!=d) ans+=dis[i]; 75 printf("%lld\n",ans); 76 } 77 78 int main() 79 { 80 freopen("message.in","r",stdin); 81 freopen("message.out","w",stdout); 82 while(1) { 83 n=re_ad(),m=re_ad(); if(!n && !m) break; Init(); 84 for(ll i=1,x,y,z;i<=m;++i) x=re_ad(),y=re_ad(),z=re_ad(),addedge(x+1,y+1,z); 85 for(ll i=1;i<=n;++i) if(!dfn[i]) tarjan(i); 86 Rebuild(),Solve(tag[1]); 87 // printf("tag: "); for(ll i=1;i<=n;++i) printf("%lld ",tag[i]); puts(""); 88 } 89 return 0; 90 }
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=5e5+11,Tree_Sz=1e6+11,inf=0x3f3f3f3f3f3f3f3f; 12 ll n,ans,a[N],maxx[N],tmx,minn[N],tmn; 13 struct Point { 14 ll x,y; 15 bool operator < (const Point &B) const { return x<B.x; } 16 }pt[N]; 17 18 namespace ST { 19 struct Node { 20 ll val,tag,cnt; 21 Node() { tag=cnt=0; val=inf; } 22 Node operator + (const Node &B) { 23 Node res; 24 if(val==B.val) res.val=val,res.cnt=cnt+B.cnt; 25 else if(val<B.val) res.val=val,res.cnt=cnt; 26 else res.val=B.val,res.cnt=B.cnt; 27 return res; 28 } 29 }t[Tree_Sz]; 30 inline void Pushup(ll d) { t[d]=t[d<<1]+t[d<<1|1]; } 31 inline void Pushdown(ll d) { 32 t[d<<1].tag+=t[d].tag,t[d<<1|1].tag+=t[d].tag; 33 t[d<<1].val+=t[d].tag,t[d<<1|1].val+=t[d].tag; 34 t[d].tag=0; 35 } 36 void modify(ll d,ll l,ll r,ll x,ll y,ll z) { 37 if(x<=l && r<=y) { t[d].val+=z,t[d].tag+=z; return ; } 38 Pushdown(d); ll mid=(l+r)>>1; 39 if(x<=mid) modify(d<<1,l,mid,x,y,z); 40 if(y>=mid+1) modify(d<<1|1,mid+1,r,x,y,z); 41 Pushup(d); 42 } 43 inline void Modify(ll x,ll y,ll z) { modify(1,1,n,x,y,z); } 44 void change(ll d,ll l,ll r,ll x,ll z) { 45 if(l==r) { t[d].val=z,t[d].cnt=1; return ; } 46 Pushdown(d); ll mid=(l+r)>>1; 47 if(x<=mid) change(d<<1,l,mid,x,z); 48 else change(d<<1|1,mid+1,r,x,z); 49 Pushup(d); 50 } 51 inline void Change(ll x,ll z) { change(1,1,n,x,z); } 52 /* 53 Node query(ll d,ll l,ll r,ll x,ll y) { 54 if(x<=l && r<=y) return t[d]; 55 Pushdown(d); ll mid=(l+r)>>1; Node res; 56 if(x<=mid) res=res+query(d<<1,l,mid,x,y); 57 if(y>=mid+1) res=res+query(d<<1|1,mid+1,r,x,y); 58 return res; 59 } 60 */ 61 inline void Query() { ans+=t[1].cnt; } 62 } 63 64 int main() 65 { 66 freopen("raid.in","r",stdin); 67 freopen("raid.out","w",stdout); 68 n=re_ad(); 69 for(ll i=1;i<=n;++i) pt[i].x=re_ad(),pt[i].y=re_ad(); 70 sort(pt+1,pt+n+1); 71 for(ll i=1;i<=n;++i) a[i]=pt[i].y; 72 for(ll r=1;r<=n;++r) { 73 while(tmx && a[r]>a[maxx[tmx]]) ST::Modify(maxx[tmx-1]+1,maxx[tmx],a[r]-a[maxx[tmx]]),--tmx; 74 while(tmn && a[r]<a[minn[tmn]]) ST::Modify(minn[tmn-1]+1,minn[tmn],a[minn[tmn]]-a[r]),--tmn; 75 maxx[++tmx]=r,minn[++tmn]=r,ST::Change(r,r),ST::Query(); 76 } 77 printf("%lld\n",ans); 78 return 0; 79 }