zoukankan      html  css  js  c++  java
  • 【题解】Luogu P4403 [BJWC2008] 秦腾与教学评估

    前言QwQ

    学长讲题系列,然而在培训前几天,某神仙刚推荐了此题,$ORZ$


    学长的一句话题解:二分答案,看前缀和奇偶变化的位置

    计算点$1$到点$i$上的点的个数,二分位置

    记得开$long long$

    code 

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 namespace gengyf{
     4 #define ll long long
     5 const int maxn=2e5+10;
     6 inline ll read(){
     7     ll x=0,f=1;
     8     char c=getchar();
     9     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    10     while(c>='0'&&c<='9'){x=(x*10)+c-'0';c=getchar();}
    11     return x*f;
    12 }
    13 int T,n,ans;
    14 ll s[maxn],e[maxn],d[maxn];
    15 bool fl;
    16 ll check(ll pos){
    17     ll tmp=0;
    18     for(int i=1;i<=n;i++){
    19         if(s[i]<=pos){
    20             tmp+=(min(pos,e[i])-s[i])/d[i]+1;
    21         }
    22     }
    23     return tmp;
    24 }
    25 int main(){
    26     T=read();
    27     while(T--){
    28         n=read();ll l=0,r=0;ans=0;
    29         for(int i=1;i<=n;i++){
    30             s[i]=read();e[i]=read();d[i]=read();
    31             r=max(r,e[i]);
    32         }
    33         if(check(r)%2==0){
    34             puts("Poor QIN Teng:(");
    35             continue;
    36         }
    37         while(l<r){
    38             ll mid=(l+r)>>1;
    39             if(check(mid)%2==1)r=mid;
    40             else l=mid+1;
    41         }
    42         for(int i=1;i<=n;i++){
    43             if(s[i]>l||e[i]<l)continue;
    44             if((l-s[i])%d[i]==0)ans++;
    45         }
    46         printf("%lld %d
    ",l,ans);
    47     }
    48     return 0;
    49 }
    50 }
    51 signed main(){
    52   gengyf::main();
    53   return 0;
    54 }
    View Code
  • 相关阅读:
    2020软件工程第三次作业
    2020软件工程第二次作业
    2020软件工程第一次作业
    线性回归算法
    K均值算法--应用
    K均值算法
    机器学习相关数学基础
    机器学习概述
    语法制导的语义翻译
    作业十四----算符优先分析
  • 原文地址:https://www.cnblogs.com/gengyf/p/11629309.html
Copyright © 2011-2022 走看看