zoukankan      html  css  js  c++  java
  • 【noip2012 提高组 day2】

    A. 【NOIP2012 提高组 day2】同余方程

    一道水题,用拓展欧几里得来计算,最后x的值要x=(x%b+b)%b;来取得非负最小值。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 ll a,b,x,y;
     6 
     7 ll exgcd(ll a,ll b,ll &x,ll &y){
     8     if(!b){
     9         x=1,y=0;
    10         return a;
    11     }
    12     ll d=exgcd(b,a%b,x,y);
    13     ll z=x;x=y;y=z-y*(a/b);
    14     return d;
    15 }
    16 
    17 int main(){
    18     scanf("%lld%lld",&a,&b);
    19     exgcd(a,b,x,y);
    20     x=(x%b+b)%b;
    21     printf("%lld",x);
    22 }

    B. 【NOIP2012 提高组 day2】借教室

    思路:先初始化sum数组即每天一共要花费的教室数量。

    1     for(int i=1;i<=n;i++) ne[i]=read();
    2     for(int i=1;i<=m;i++){
    3         d[i]=read(),l[i]=read(),r[i]=read();
    4         sum[l[i]]+=d[i],sum[r[i]+1]-=d[i];
    5     }
    6     for(int i=1;i<=n;i++){
    7         sum[i]+=sum[i-1];
    8     }

     然后从第一天开始循环,遇到不合法的情况就开始二层循环m个询问从后往前

    遇到一个包含此天的就减去教室数量知道满足条件,这时候的j就表示一直到第j个询问刚好不满足条件

    然后不断更新j 的下限;

    最后输出

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 const int N=1e6+5;
     6 ll n,m;
     7 ll ne[N],d[N],l[N],r[N],sum[N];
     8 
     9 inline ll read(){
    10     ll x=0,f=1;
    11     char s=getchar();
    12     while(!isdigit(s)) f*=(s=='-')? 1:1,s=getchar();
    13     do x=(x<<1)+(x<<3)+(s^48),s=getchar();
    14     while(isdigit(s));
    15     return x*f;
    16 }
    17 
    18 int main(){
    19     n=read(),m=read();
    20     for(int i=1;i<=n;i++) ne[i]=read();
    21     for(int i=1;i<=m;i++){
    22         d[i]=read(),l[i]=read(),r[i]=read();
    23         sum[l[i]]+=d[i],sum[r[i]+1]-=d[i];
    24     }
    25     for(int i=1;i<=n;i++){
    26         sum[i]+=sum[i-1];
    27     }
    28     int anss=1e9;
    29     for(int i=1;i<=n;i++){
    30         if(sum[i]>ne[i]){
    31             ll k=sum[i];
    32             int j;
    33             for(j=m;j>=1;j--){
    34                 if(l[j]<=i && r[j]>=i){
    35                     k-=d[j];
    36                     if(k<=ne[i]) break;
    37                 }
    38             }
    39             anss=min(anss,j);
    40             if(anss==1) break;
    41         }
    42     }
    43     if(anss==1e9) printf("0");
    44     else printf("%d
    %d",-1,anss);
    45     return 0;    
    46 }

    C. 【NOIP2012 提高组 day2】疫情控制

    。。。待

  • 相关阅读:
    几个ssh和sftp的命令
    发现一个github的奇葩设定
    插耳机对orientation sensor的影响
    android中MediaPlayer类的用法
    Oracle 高性能SQL引擎剖析----执行计划
    【转】对列式数据库的一点总结和展望
    【转】大数据分析(Big Data OLAP)引擎Dremel, Tenzing 以及Impala
    TCP/IP协议详解---概述
    读取HttpWebResponse流的两种方法及注意的问题
    This project references NuGet package(s) that are missing on this computer.
  • 原文地址:https://www.cnblogs.com/lirh04/p/12648437.html
Copyright © 2011-2022 走看看