zoukankan      html  css  js  c++  java
  • Codeforces Round #645 (Div. 2)

    A. Park Lighting

    公园是一张n行m列的长方形桌子,桌子的格子是正方形,格子之间的边界是街道。外部边界也是街道。每条街道的长度都是1。例如,n=m=2的公园有12条街道。

    你可以在街道中间放灯笼。这盏灯在它附近亮两个正方形(如果它位于公园的边界上,则只亮一个正方形)。

    判断一下奇偶分类讨论即可

    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #include <string>
    #define form(i,n) for(int i=1;i<=n;i++)
    #define forn(i,n) for(int i=0;i<n;i++)
    #define mst(a) memset(a,0,sizeof(a))
    using namespace std;
    typedef pair<int,int> P ;
    const int N=1e5;
    typedef unsigned long long ull;
    typedef long long ll;
    const int MAX_N=1e5+20;
    struct node{
        int x,y;
    };
    int n,m;
    int main(){
        ios::sync_with_stdio(0);
        int T;
        cin>>T;
        while (T--){
            ll ans=0;
            cin>>n>>m;
            if(n%2==0&&m%2==0){
                cout<<n*m/2<<endl;
            }else if(n&1&&m%2==0){
                cout<<m/2*n<<endl;
            }else if(m&1&&n%2==0){
                cout<<n/2*m<<endl;
            }else{
                cout<<n/2*m+m/2+1<<endl;
            }
        }
    }

    B. Maria Breaks the Self-isolation

    有n个人在屋子里

    你可以一次叫出很多个人 这些人出来的时候可以相互看到 也可以看到院子里已经有的人
    第i个人出来时必须看到包括玛利亚但不包括自己的至少ai个人 

    问最多院子里能有多少个人(包括玛利亚)

    阅读理解题,这里注意一下最后算人的时候要算上玛利亚本人,而之前不算

    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #include <string>
    #define form(i,n) for(int i=1;i<=n;i++)
    #define forn(i,n) for(int i=0;i<n;i++)
    #define mst(a) memset(a,0,sizeof(a))
    using namespace std;
    typedef pair<int,int> P ;
    const int N=1e5;
    typedef unsigned long long ull;
    typedef long long ll;
    const int MAX_N=1e5+20;
    struct node{
        int x,y;
    };
    int n,m;
    ll a[N];
    int main(){
        ios::sync_with_stdio(0);
        int T;
        cin>>T;
        while (T--){
            cin>>n;
            ll in=0;
            ll rd=1;
            forn(i,n){
                cin>>a[i];
            }
            sort(a,a+n);
            for(int i=0;i<n;i++){
                if(a[i]<=in+rd){
                    in=in+rd;
                    rd=1;
                }else{
                    rd++;
                }
            }
            cout<<in+1<<endl;
        }
    }

    C. Celex Update

    给你这样的一个格子 给你两个坐标 
    从第一个坐标移动到第二个坐标 每次只能向下或向右
    每遇到一个数字就把这个数字加到自己的sum里

    问最后可获得多少种sum

    一开始做这题:这不就是在总共m+n-1里随便选m个位置的组合问题吗
    Time limited
    哦,1e9,那天晚上脑子抽了居然关心的不是时间复杂度而是大整数并决定用py...

    题解借用官方的一张图

    每次往右会比往下少1,最大是下到底再右,最小是右到底再下,所以答案是x+y+1

    #include <bits/stdc++.h>
    #define form(i,n) for(int i=1;i<=n;i++)
    #define forn(i,n) for(int i=0;i<n;i++)
    #define mst(a) memset(a,0,sizeof(a))
    using namespace std;
    typedef pair<int,int> P ;
    const int N=1e5;
    typedef unsigned long long ull;
    typedef long long ll;
    const int MAX_N=1e5+20;
    ll x,y,xx,yy;
    int n,m;
    ll a[1000][1000];
    int main(){
        ios::sync_with_stdio(0);
        cin>>n;
        while (n--){
            cin>>x>>y>>xx>>yy;
            x=xx-x;
            y=yy-y;
            cout<<x*y+1<<endl;
        }
    }

    D. The Best Vacation

    有n个月 每个月d天 日期是1 2 3 ……d 给x天 问从哪天开始走,走x天 日期的和最大

    可以从今年跨越到明年 

    取到最大值的时候结尾必须要在每个月的月底那天,所以我们枚举每个月底

    然后用前缀和维护 二分查询 时间复杂度o(nlogn)

    
    
    #include <bits/stdc++.h>
    #define form(i,n) for(int i=1;i<=n;i++)
    #define forn(i,n) for(int i=0;i<n;i++)
    #define mst(a) memset(a,0,sizeof(a))
    using namespace std;
    typedef pair<int,int> P ;
    const int N=1e5;
    typedef unsigned long long ull;
    typedef long long ll;
    const int MAX_N=4e5+20;
    ll m,n,x,y,xx,yy,ans;
    ll d[N];
    int main(){
    scanf("%lld%lld", &n, &m);
    for (ll i = 1; i <= n; i++){
    scanf("%lld", d + i);
    d[i + n] = d[i];
    }
    n = n * 2;
    ll l = 1;
    ll len = 0, nw = 0;
    for (ll i = 1; i <= n; i++){
    len += d[i];
    nw += d[i] * (d[i] + 1) / 2;
    while (len > m){
    len -= d[l];
    nw -= d[l] * (d[l] + 1) / 2;
    l++;
    }
    if (l > 1) ans = max(ans, nw + (d[l - 1] + d[l - 1] - (m - len) + 1) * (m - len) / 2);
    else ans = max(ans, nw);
    }
    printf("%lld ", ans);
    return 0;
    }
    
    


     
  • 相关阅读:
    [轉]Array of pointer VS. Pointer to Array
    VirtualBox 4.2.4 Network setting
    [轉]Interview
    REMOVE “EVAL(BASE64_DECODE” USING LINUX COMMANDS FROM ALL PHP FILES ACROSS MULTIPLE WORDPRESS
    Virtualbox 掛載共用資料夾,解決掛不起來的問題。
    Web shell in php
    端口轉發映射,突破內網
    String 處理 in Java
    [轉]java学习笔记 【二】 常见错误 Class files on classpath not found or not accessible for
    如何讀取float型態資料在記憶體中的值
  • 原文地址:https://www.cnblogs.com/ilikeeatfish/p/12990636.html
Copyright © 2011-2022 走看看