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 }
posted @ 2021-10-07 16:08  上官书房  阅读(59)  评论(0)    收藏  举报