zoukankan      html  css  js  c++  java
  • 2017-10-25模拟赛

    T1 任务安排

    容易发现 ans一定在0到min(s[i],t[i]) 的范围内,二分这个最早时间,按着完成工作、

     1 #include <algorithm>
     2 #include <cstdio>
     3 
     4 inline void read(int &x)
     5 {
     6     x=0; register char ch=getchar();
     7     for(; ch>'9'||ch<'0'; ) ch=getchar();
     8     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     9 }
    10 const int N(100005);
    11 struct Work {
    12     int t,s;
    13     bool operator < (const Work&x)const
    14     {
    15         if(s==x.s) return t<x.t;
    16         return s<x.s;
    17     }
    18 }job[N];
    19 
    20 int ans=-1,L,R,Mid,n;
    21 inline bool check(int x)
    22 {
    23     for(int i=1; i<=n; ++i)
    24     {
    25         if(x+job[i].t>job[i].s) return 0;
    26         x+=job[i].t;
    27     }
    28     return 1;
    29 }
    30 
    31 int Presist()
    32 {
    33     freopen("manage.in","r",stdin);
    34     freopen("manage.out","w",stdout);
    35     
    36     read(n);
    37     for(int t,i=1; i<=n; ++i)
    38         read(job[i].t),read(job[i].s);
    39     std::sort(job+1,job+n+1);
    40     for(R=job[1].s-job[1].t+1; L<=R; )
    41     {
    42         Mid=L+R>>1;
    43         if(check(Mid))
    44         {
    45             ans=Mid;
    46             L=Mid+1;
    47         }
    48         else R=Mid-1;
    49     }
    50     printf("%d
    ",ans);
    51     return 0;
    52 }
    53 
    54 int Aptal=Presist();
    55 int main(int argc,char**argv){;}
    AC

    貌似可以直接贪心过。。

     T2 小 a 的强迫症

    处理个数前缀和sum[i],对于第i个珠子对答案的贡献为C(sum[i]-1,num[i]-1),乘法原理统计ans

     1 #include <cstdio>
     2 
     3 #define LL long long
     4 
     5 inline void read(int &x)
     6 {
     7     x=0; register char ch=getchar();
     8     for(; ch>'9'||ch<'0'; ) ch=getchar();
     9     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
    10 }
    11 const int mod(998244353);
    12 const int MAX(500005);
    13 const int N(100005);
    14 int num[N],sum[N];
    15 LL jc[MAX];
    16 
    17 inline LL Pow(LL a,LL b)
    18 {
    19     LL ret=1;
    20     for(; b; b>>=1,a=(a%mod)*(a%mod)%mod)
    21         if(b&1) ret=(ret%mod)*(a%mod)%mod;
    22     return ret%mod;
    23 }
    24 
    25 inline LL C(int a,int b)
    26 {
    27     return jc[a]%mod*Pow(jc[b],mod-2)%mod*Pow(jc[a-b],mod-2)%mod;
    28 }
    29 
    30 int Presist()
    31 {
    32     freopen("qiang.in","r",stdin);
    33     freopen("qiang.out","w",stdout);
    34     
    35     int n; read(n);    jc[0]=1;
    36     for(int i=1; i<=n; ++i)
    37         read(num[i]),sum[i]=sum[i-1]+num[i];
    38     for(int i=1; i<=sum[n]; ++i)
    39         jc[i]=jc[i-1]%mod*i%mod%mod;
    40     LL ans=1;
    41     for(int i=2; i<=n; ++i)
    42         ans=ans%mod*C(sum[i]-1,num[i]-1)%mod;
    43     printf("%I64d
    ",ans);
    44     return 0;
    45 }
    46 
    47 int Aptal=Presist();
    48 int main(int argc,char**argv){;}
    AC

     T3 函数求和

     1 #include <cstdio>
     2 
     3 #define LL long long
     4 
     5 inline void read(int &x)
     6 {
     7     x=0; register char ch=getchar();
     8     for(; ch>'9'||ch<'0'; ) ch=getchar();
     9     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
    10 }
    11 const int N(1e5+5);
    12 int a[N],L[N],R[N],sum[N];
    13 
    14 struct Tree {
    15     int l,r;
    16     LL  sum;
    17     bool flag;
    18 }tr[2][N<<2];
    19 
    20 #define lc (now<<1)
    21 #define rc (now<<1|1)
    22 
    23 void Tree_push(int now)
    24 {
    25     tr[0][lc].flag+=tr[0][now].flag;
    26     tr[0][lc].sum+=tr[0][now].flag;
    27     tr[0][rc].flag+=tr[0][now].flag;
    28     tr[0][rc].sum+=tr[0][now].flag;
    29     tr[0][now].flag=0;
    30 }
    31 
    32 void Tree_change(int now,int to,int x)
    33 {
    34     if(tr[0][now].l==tr[0][now].r)
    35     {
    36         tr[0][now].sum=x;
    37         tr[0][now].flag+=x;
    38         return ;
    39     }
    40     if(tr[0][now].flag) Tree_push(now);
    41     int mid=tr[0][now].l+tr[0][now].r>>1;
    42     if(to<=mid) Tree_change(lc,to,x);
    43     else if(to>mid) Tree_change(rc,to,x);
    44     tr[0][now].sum=tr[0][lc].sum+tr[0][rc].sum;
    45 }
    46 
    47 LL Tree_query(int now,int l,int r,int op)
    48 {
    49     if(tr[op][now].l==l&&tr[op][now].r==r) return tr[op][now].sum;
    50     int mid=tr[op][now].l+tr[op][now].r>>1;
    51     if(r<=mid) return Tree_query(lc,l,r,op);
    52     else if(l>mid) return Tree_query(rc,l,r,op);
    53     else return Tree_query(lc,l,mid,op)+Tree_query(rc,mid+1,r,op);
    54 }
    55 
    56 void Tree_build(int now,int l,int r,int op)
    57 {
    58     tr[op][now].l=l,tr[op][now].r=r;
    59     if(l==r)
    60     {
    61         if(!op) tr[op][now].sum=a[l];
    62         else tr[op][now].sum=Tree_query(1,L[l],R[l],0);
    63         tr[op][now].flag=0; return ;
    64     }
    65     int mid=tr[op][now].l+tr[op][now].r>>1;
    66     Tree_build(lc,l,mid,op); Tree_build(rc,mid+1,r,op);
    67     tr[op][now].sum=tr[op][lc].sum+tr[op][rc].sum;
    68 }
    69 
    70 int Presist()
    71 {
    72     freopen("sum.in","r",stdin);
    73     freopen("sum.out","w",stdout);
    74     int n; read(n);
    75     for(int i=1; i<=n; ++i) read(a[i]);
    76     Tree_build(1,1,n,0);
    77     for(int i=1; i<=n; ++i)
    78         read(L[i]),read(R[i]);
    79     Tree_build(1,1,n,1);
    80     int q; read(q);
    81     for(int op,l,r; q--; )
    82     {
    83         read(op),read(l),read(r);
    84         if(op==1)
    85         {
    86             Tree_change(1,l,r);
    87             Tree_build(1,1,n,1);
    88         }
    89         else printf("%I64d
    ",Tree_query(1,l,r,1));
    90     }
    91     return 0;
    92 }
    93 
    94 int Aptal=Presist();
    95 int main(int argc,char**argv){;}
    线段树20分暴力
      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 #include<cmath>
      5 using namespace std;
      6 typedef unsigned long long LL;
      7 #define lowbit(x) ((x)&-(x))
      8 int n;
      9 int a[100005];
     10 LL c[100005];
     11 int L[100005],R[100005];
     12 int Q;
     13 int t[405][100005];
     14 int belong[100005];// (i-1)/B+1
     15 LL sum[405];
     16 int B,NUM;
     17 void add(int x,LL d){
     18     while(x<=n){
     19         c[x]+=d;
     20         x+=lowbit(x);
     21     }
     22 }
     23 LL ask(int x){
     24     LL ret=0;
     25     while(x){
     26         ret+=c[x];
     27         x-=lowbit(x);
     28     }
     29     return ret;
     30 }
     31 int main(){
     32     freopen("sum.in","r",stdin);
     33     freopen("sum.out","w",stdout);
     34     scanf("%d",&n);
     35     for(int i=1;i<=n;i++){
     36         scanf("%d",&a[i]);
     37     }
     38     for(int i=1;i<=n;i++){
     39         scanf("%d%d",&L[i],&R[i]);
     40     }
     41     B=sqrt(n)+1;
     42 //  printf("#%d
    ",B);
     43     NUM=(n-1)/B+1;
     44     for(int i=1;i<=n;i++) belong[i]=(i-1)/B+1;
     45     for(int i=1;i<=n;i++) c[i]=a[i];
     46     for(int i=1;i<=n;i++){
     47         if(i+lowbit(i)<=n){
     48             c[i+lowbit(i)]+=c[i];
     49         }
     50     }
     51     for(int i=1;i<=n;i++){
     52         t[belong[i]][L[i]]++;
     53         t[belong[i]][R[i]+1]--;
     54     }
     55     for(int i=1;i<=NUM;i++){
     56         for(int j=1;j<=n;j++){
     57             t[i][j]+=t[i][j-1];
     58             sum[i]+=t[i][j]*1ULL*a[j];
     59         }
     60     }
     61     scanf("%d",&Q);
     62     while(Q--){
     63         int type,x,y;
     64         scanf("%d%d%d",&type,&x,&y);
     65         if(type==1){
     66             for(int i=1;i<=NUM;i++){
     67                 sum[i]-=t[i][x]*1ULL*a[x];
     68                 sum[i]+=t[i][x]*1ULL*y;
     69             }
     70             add(x,-a[x]);
     71             a[x]=y;
     72             add(x,a[x]);
     73         }else{
     74             int Ln,Rn;
     75             Ln=belong[x],Rn=belong[y];
     76             LL ans=0;
     77             if(Ln==Rn){
     78                 for(int i=x;i<=y;i++){
     79                     ans+=ask(R[i])-ask(L[i]-1);
     80                 }
     81             }else{
     82                 for(int i=Ln+1;i<Rn;i++) ans+=sum[i];
     83                 int lim;
     84                 lim=Ln*B;
     85                 lim=min(lim,y);
     86                 for(int i=x;i<=lim;i++){
     87                     ans+=ask(R[i])-ask(L[i]-1);
     88                 }
     89                 lim=(Rn-1)*B+1;
     90                 lim=max(lim,x);
     91                 for(int i=lim;i<=y;i++){
     92                     ans+=ask(R[i])-ask(L[i]-1);
     93                 }
     94             }
     95             printf("%I64d
    ",ans);
     96         }
     97     }
     98     fclose(stdout);
     99     return 0;
    100 }
    std
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    django 登入,注册,密码重置
    Django 通过 admin 操作 MySQL数据库 ,审核功能加储存记录
    Python Django 循环插入到 MongoDB数据库中
    运行Django找不到Windows“http://127.0.0.1:8000/”的问题
    大数据 ----- Linux(基础命令)
    大数据 ----- 虚拟机与SXhell6 的链接
    大数据 ----- 在Xshell6 安装Hadoop与JDK以及环境变量
    java day14第十四课 IO(输入、输出)流和JAVA目录操作(重中之重)
    13弹;集合中的工具类Collections和Arrays
    第3弹;流程控制
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7728676.html
Copyright © 2011-2022 走看看