zoukankan      html  css  js  c++  java
  • Edu 87

    A. Alarm Clock

    (a, b, c, dleft(1 leq a, b, c, d leq 10^{9} ight)),需要睡够(a)分钟,第一次睡(b)分钟,然后闹钟在(c)分钟后响,(d)分钟后再次入睡
    判断一下能不能完成,输出花费的时间

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    
    int main(){
        for(scanf("%d",&_);_;_--){
            ll a,b,c,d;
            ll ans=0;
            cin>>a>>b>>c>>d;
            if(b>=a) { cout<<b<<endl;continue;}
            if(d>=c) {puts("-1");continue;}
            a-=b;
            ans+=b;
            ans+= (a/(c-d) * c);
            if(a%(c-d) != 0) ans+=c;
            cout<<ans<<endl;
        }
    }
    

    B. Ternary String

    一个字符串(s(1 leq|s| leq 200000)),由1,2,3构成,找到包含这三个的最短连续子串
    遍历一下,记录三个字符的最后位置每次更新一下答案

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    
    int main(){
        for(scanf("%d",&_);_;_--){
            string s;
            cin>>s;
            map<char,bool>rec;
            rep(i,0,s.size()) {rec[s[i]]=true;}
            bool ok=1;
            if(rec['1'] && rec['2'] && rec['3']) ok=1;
            else ok=0;
            if(!ok){puts("0");continue;}
            int ans=1e10;
            int one=0,two=0,three=0;
            rep(i,0,s.size()){
                if(s[i]=='1') one=max(one,i+1);
                else if(s[i]=='2') two=max(two,i+1);
                else three=max(three,i+1);
                int mi=min(min(one,two),three);
                int mx=max(max(one,two),three);
                if(mi!=0 && mx != 0)
                ans=min(ans,mx-mi+1);
            }
            cout<<ans<<endl;
        }
    }
    

    C1. Simple Polygon Embedding

    (n(2 leq n leq 200))条边的正多变形,(n)为偶数,求能将图形嵌入的最小正方形的面积

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    const double pi = 3.1415926;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    
    int main(){
        for(scanf("%d",&_);_;_--){
            double n;
            cin>>n;
            double a=90/n;
            double l=0.5/tan(a * pi/180);
            printf("%.7lf
    ",l*2);
        }
    }
    

    (n(2 leq n leq 200))条边的正多变形,(n)为奇数,求能将图形嵌入的最小正方形的面积

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    const double pi = 3.1415926;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    
    int main(){
        int t;
        cin>>t;
        while(t--){
            double n;
            cin>>n;
            double a= 90/n * pi /180;
            double l = 0.5 /sin (a);
            double c = cos (a/2);
            printf("%.7lf
    ",l*c*2);
        }
    }
    

    D. Multiset

    (n ext { and } qleft(1 leq n, q leq 10^{6} ight)),初始长度为(n)的序列,(a_{1}, a_{2}, ldots, a_{n}left(1 leq a_{1} leq a_{2} leq cdots leq a_{n} leq n ight))
    (q)个询问每个询问一个(k),如果(1 leq k_{i} leq n),在序列中插入(k_{i})(k_{i}<0)则删除第(k_{i})个元素
    在值域上建立树状数组,树状数组统计每个数存在的个数,增加直接在对应值增加即可,删除二分前缀和为(k)的即第(k)大的数

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    const int N=1e6+10;
    int c[N],a[N];
    int lowbit(int x){return x&(-x);}
    void add(int x,int y){
        for(int i=x;i<N;i+=lowbit(i))
            c[i]+=y;
    }
    
    int ask(int x){
        int res=0;
        for(int i=x;i;i-=lowbit(i))
            res+=c[i];
        return res;
    }
    
    int main(){
        int n,q;
        scanf("%d%d",&n,&q);
        rep(i,1,n+1) {
            int x;
            scanf("%d",&x);
            add(x,1);
        }
        while(q--){
            int k;
            scanf("%d",&k);
            if(k>0){
                add(k,1);
            }
            else{
                k=-k;
                int l=1,r=N;
                while(l<r){
                    int mid=l+r>>1;
                    if(ask(mid) >= k)
                        r=mid;
                    else l=mid+1;
                }
                add(l,-1);
            }
        }
        if(ask(N) == 0) puts("0");
        else{
            int l=1,r=N;
            while(l<r){
                int mid=l+r>>1;
                if(ask(mid) !=0)
                    r=mid;
                else l=mid+1;
            }
            printf("%d
    ",l);
        }
    
    }
    

    Code

    
    
  • 相关阅读:
    【vue坑】vue组件不显示,没加载dom
    vue radio绑定数据
    git修改密码遇到的坑 git -- Authentication failed for
    python全局变量
    adb无法使用,提示error: unknown host service的解决办法
    uiautomator2 init初始化失败
    【解决方案】安装lxml失败 Installing lxml
    【一般都是源的问题】ubuntu使用apt-get update更新失败
    ubuntu 安装python3.6 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决
    ubuntu设置python软链python3.5和python3.6同时存在,python3指令使用python3.6
  • 原文地址:https://www.cnblogs.com/hhyx/p/12961903.html
Copyright © 2011-2022 走看看