2020/3/14 Preliminaries for Benelux Algorithm Programming Contest 2019 部分补题报告和解题报告

A. Architecture

比较行列最大值相同则possible 不同则impossible

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
int main(){
    int r,c,x,y,i;
    int maxx=0,maxy=0;
    cin>>r>>c;
    for(i=1;i<=r;i++){
        cin>>x;
        maxx=max(x,maxx);
    }
    for(i=1;i<=c;i++){
        cin>>y;
        maxy=max(maxy,y);
    }
    if(maxx==maxy){
        cout<<"possible"<<endl;
    }else{
        cout<<"impossible"<<endl;
    }

    return 0;
}

B  Bracket Sequence

题意:

给定一个带括号的串,求运算结果,结果对1e9+7取模。
第一层括号外数相加,第一层到第二层为相乘,然后交替运算,给定n,输入n个字符(数字或左右括号)

const int N = 300000 + 5;
const int mod = 1e9 + 7;
ll st[N], top, cnt;
int n;
char op[20];
ll get(char *s){
    int len = strlen(s);
    ll x = 0;
    for(int i=0;i<len;i++) x = x * 10 + s[i] - ‘0‘;
    return x;
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%s",op);
        if(op[0] == ‘(‘) {
            cnt ++;
            st[++top] = -1;
            continue;
        }
        else if(op[0] == ‘)‘){
            if(st[top] == -1) {
                top --;
                continue;
            }
            ll x = st[top];
            while(top >= 2 && st[top-1] != -1){
                if(cnt % 2 == 0)x = (st[top-1] + x)%mod;
                else x = st[top-1] * x % mod;
                top--;
            }
            cnt --;
            top -= 2;
            st[++top] = x;
        }
        else{
            ll x = get(op);
            st[++top] = x;
        }
    }
    ll res = 0;
    while(top) res = (res + st[top--]) % mod;
    printf("%lld\n", res);
    return 0;
}

D. Deceptive Dice

E. Exits in Excess

F. Floor Plan

题意:

给 n 判断是否存在m,k使 n = m^2 - k^2 ,即n = (m+k)(m-k),存在则输出吗,m,k ,不存在则impossible,根据数学,可知若 c = a+b,d =a-b;则 a= (c+d)/2; b = (c-d)/2;

从1开始到sqrt (n)+1 ,从中找n的因子,可以求得 n =因子*(n/因子),即n = a*b  a即两数和 b即两数差 求(a+b)/2, (a-b)/2 因为可能不被二整除 若(a+b)/2+(a-b)/2==a

且(a+b)/2 - (a-b)/2==b,则m=(a+b)/2, k=(a-b)/2;

sqrt(n) 是因为 a b 都在 0 和 n 之间  +1是因为会被省掉小数的部分

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){

    int n;
    long long m,k,i,j,a,b;
    scanf("%d",&n);
    for(i=1;i<=sqrt(n)+1;i++){
        if(n%i==0){
            a=n/i;
            b=i;
            m=(a+b)/2;
            k=(a-b)/2;
            if((m+k)==a&&(m-k)==b&&(a-b)>=0){
                printf("%lld %lld\n",m,k);

                return 0;
            }
        }
    }
          printf("impossible");
          return 0;
}

G. Greetings!

把字符串中的e双倍输出

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
char s[1010];
int main(){
    string a;
    cin>>s;
    for(int i=0;i<strlen(s);i++){
        a+=s[i];
        if(s[i]==‘e‘) a+=‘e‘;
    }
    cout<<a<<endl;
    return 0;
}

I. Inquiry I

给定n个正整数a1,…, an,判断下面式子的最大值是多少

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
#define MAXN  1000010
long long a[MAXN],b[MAXN];
int main(){
    int n,num;
    scanf("%d",&n);
    long long maxx=0;
    for(int i=1;i<=n;i++){
        scanf("%d",&num);
        a[i]+=a[i-1]+num*num; //计算前i个数的平方和
        b[i]+=b[i-1]+num;     //计算前i个数的和
    }

    for(int i=1;i<n;i++){
        maxx=max(maxx,a[i]*(b[n]-b[i]));
    }
      printf("%lld\n",maxx);

      return 0;
}

原文地址:https://www.cnblogs.com/yy0826/p/12520392.html

时间: 2024-11-09 13:19:16

2020/3/14 Preliminaries for Benelux Algorithm Programming Contest 2019 部分补题报告和解题报告的相关文章

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法

2020.3.21 Benelux Algorithm Programming Contest 2019 解题报告

B-Breaking Branches 大意就是两个人掰树枝子玩,是个典型的博弈题,判断能不能被2整除就可以了 #include<cstdio> using namespace std; int main(){ long long int n,m,t; scanf("%lld",&n); if(n%2==0){ printf("Alice\n"); printf("1\n"); }else{ printf("Bob\

Benelux Algorithm Programming Contest 2019 (2020-3-21)

B. Breaking Branches 解题思路: 看了半天才看懂什么意思QWQ,就判断一下奇数还是偶数就行了. AC代码: #include<math.h> #include<stdio.h> #include<algorithm> #include<iostream> #include <string.h> using namespace std; int main() { int n; cin>>n; if(n%2==0){

Benelux Algorithm Programming Contest 2019

J. Jazz it Up!题目要求,n*m的因子中不能含有平方形式,且题目中已经说明n是一个无平方因子的数, 那么只要m是无平方因子的数,并且n和m没有共同的因子即可.要注意时间复杂度!代码:#include<iostream> #include<algorithm> #include<cmath> using namespace std; int main(){ int n,i,a,b; long long int m,p,j; cin>>n; for(

Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E. Excellent Engineers-单点更新、区间最值-线段树 G. Growling Gears I. Interesting Integers-类似斐波那契数列-递推思维题

先写这几道题,比赛的时候有事就只签了个到. E. Excellent Engineers 传送门: 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到名单中. 因为是3个变量,所以按其中一个变量进行sort排序,然后,剩下的两个变量,一个当位置pos,一个当值val,通过线段树的单点更新和区间最值操作,就可以把名单确定. 代码: 1 //E-线段树 2 #include<iostream> 3 #include<cstdio> 4 #incl

Gym -102007 :Benelux Algorithm Programming Contest (BAPC 18) (寒假自训第5场)

A .A Prize No One Can Win 题意:给定N,S,你要从N个数中选最多是数,使得任意两个之和不大于S. 思路:排序,然后贪心的选即可. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int maxn=2000010; ll a[maxn]; int main() { int N,ans; l

[AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

[AtCoder] NIKKEI Programming Contest 2019 ??本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder. A - Subscribers ??首先始终 \(max = \min(A, B)\) ,\(min\) 的话如果 \(A + B \leq N\) ,那么就是 \(0\) ,否则就是 \(A + B - N\) . int n, a, b; int main() { read(n), read

2020.03.14 Preliminaries for BAPC 2019 解题报告

目录 B 题意 思路 代码 D 题意 思路 代码 E 题意 思路 代码 I 题意 思路 代码 B 题意 就是让你通过给你的规律,来把一行公式进行求值 思路 通过看题面上的规律, 我们可以知道第一行是+,第二行是*,第三行是+and so on ...,所以我们只要把对应位置的数字用对应的符号进行运算就行 代码 #include<iostream> #include<string> #include<cstring> #include<algorithm> #

NIKKEI Programming Contest 2019 翻车记

A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getc