zoukankan      html  css  js  c++  java
  • 2019.3.14解题报告&补题报告

    A题

    题意:

    输入r, c,代表r*c的矩阵,接下来一行,是r个数,代表每一行里最大的数;接下来一行,是c个数,代表每一列中的最大数。求所给数据是否冲突。

    思路:判断r个数中最大数maxr和c个数中最大数maxc是否相等,相等即能构造矩阵,否则不能。原因是maxr和maxc都是矩阵最大值,只有两数相等才可能构成矩阵。

    代码:

     1 #include<bits/stdc++.h>
     2 
     3 #define vint vector<int>
     4 #define vstr vector<string>
     5 #define vll vector<long long>
     6 #define ll long long
     7 #define ull unsigned long long
     8 #define pf printf
     9 #define sf scanf
    10 #define sfd(n) scanf("%d", &n)
    11 #define sflf(n) scanf("%lf", &n)
    12 #define sfll(n) scanf("%lld", &n)
    13 #define pfd(n) printf("%d", n)
    14 #define pflf(n) printf("%lf", n)
    15 #define pfll(n) printf("%lld", n)
    16 #define pft    printf("	")
    17 #define pfn printf("
    ")
    18 #define pfk printf(" ")
    19 #define PI 3.1415926
    20 #define MAX 100000
    21 
    22 using namespace std;
    23 
    24 int n, m;
    25 int a[105], b[105];
    26 
    27 int main() {
    28     cin >> n >> m;
    29     int maxr = -1, maxc = -1;
    30     for (int i = 1; i <= n; i++) {
    31         cin >> a[i];
    32         maxr = max(maxr, a[i]);
    33     }
    34     for (int i = 1; i <= m; i++) {
    35         cin >> b[i];
    36         maxc = max(maxc, b[i]);
    37     }
    38     if( maxr==maxc ) {
    39         cout << "possible" << endl;
    40     }else {
    41         cout << "impossible" << endl;
    42     }
    43          
    44 
    45     return 0;
    46 }

    F题

    题意:

    给定n, 且n = m^2 - k^2 ,求m,k。

    思路:

    设m = k+x;

    则m^2 - k^2 = 2*x*k+x^2

    即n = 2*x*k+x^2 ,    x、k是正整数

    所以当x是奇数时,n为奇数;当x是偶数时,n是4的倍数;

    所以

    • n是奇数:x可以取1,即n = 2*k+1, m = k+1;
    • n是4的倍数:x取2,即n = 4*k+4, m = k+2;
    • n%2==0&&n%4!=0: 无法满足式子;

    代码:

     1 #include<bits/stdc++.h>
     2 
     3 #define vint vector<int>
     4 #define vstr vector<string>
     5 #define vll vector<long long>
     6 #define ll long long
     7 #define ull unsigned long long
     8 #define pf printf
     9 #define sf scanf
    10 #define sfd(n) scanf("%d", &n)
    11 #define sflf(n) scanf("%lf", &n)
    12 #define sfll(n) scanf("%lld", &n)
    13 #define pfd(n) printf("%d", n)
    14 #define pflf(n) printf("%lf", n)
    15 #define pfll(n) printf("%lld", n)
    16 #define pft    printf("	")
    17 #define pfn printf("
    ")
    18 #define pfk printf(" ")
    19 #define PI 3.1415926
    20 #define MAX 100000
    21 
    22 using namespace std;
    23 
    24 int main() {
    25     ll n, m, k;
    26     bool f = true;
    27     cin >> n;
    28     if( n%2!=0 ) {
    29         k = (n-1)/2;
    30         m = k+1;
    31     }else if( n%4==0 ){
    32         k = (n-4)/4;
    33         m = k+2;
    34     }else {
    35         f = false;
    36     }
    37     if( f ) {
    38         cout << m << " " << k;
    39     }else {
    40         pf("impossible");
    41     }
    42 
    43     return 0;
    44 }

    I题

    题意:

    求公式最大值

    思路:

    sos保存前k项的平方和,sum保存后(n-k)项的和,

    遍历k,求最大值

    代码:

     1 #include<bits/stdc++.h>
     2 
     3 #define vint vector<int>
     4 #define vstr vector<string>
     5 #define vll vector<long long>
     6 #define ll long long
     7 #define ull unsigned long long
     8 #define pf printf
     9 #define sf scanf
    10 #define sfd(n) scanf("%d", &n)
    11 #define sfc(n) scanf("%c", &n)
    12 #define sflf(n) scanf("%lf", &n)
    13 #define sfll(n) scanf("%lld", &n)
    14 #define pfd(n) printf("%d", n)
    15 #define pfc(n) printf("%c", n)
    16 #define pflf(n) printf("%lf", n)
    17 #define pfll(n) printf("%lld", n)
    18 #define pft    printf("	")
    19 #define pfn printf("
    ")
    20 #define pfk printf(" ")
    21 #define PI 3.1415926
    22 #define MAX 100000
    23 
    24 using namespace std;
    25 
    26 int main() {
    27     int n;
    28     cin >> n;
    29     int* num = new int[n];
    30     cin >> num[0];
    31     ll sos = num[0]*num[0], sum = 0, max = 0, ans;
    32     for( int i=1; i<n; i++ ) {
    33         cin >> num[i];
    34         sum += num[i];
    35     }
    36     for( int k=1; k<n; k++ ) {
    37         ans = sos*sum;
    38         if( max<ans ) {
    39             max = ans;
    40         }
    41         sos += num[k]*num[k];
    42         sum -= num[k];
    43     }
    44     pfll(max);
    45 
    46     return 0;
    47 }
  • 相关阅读:
    bzoj1027
    bzoj1069
    poj2079
    poj2187
    bzoj2281
    bzoj2285
    bzoj1558
    bzoj1822
    bzoj1559
    bzoj1570
  • 原文地址:https://www.cnblogs.com/s-learner/p/12546703.html
Copyright © 2011-2022 走看看