1. 程式人生 > >9.14考試總結

9.14考試總結

沒有 freopen scanf 總結 子串和 數學 pac ans 推銷員

9.14考試總結

感覺考試範圍逐漸偏離自己能力範圍。所以要加緊學習

小朋友的數字

DP題目,顯示最大子串和,再是直接暴力

主要註意可能會爆long long;所以要理性分析

簡單的推理就可以知道這個是單調上升或者下降的,所以只要判斷與第一個數據的大小關系就可以推出最後結尾的答案

#include<bits/stdc++.h>
#define IL inline
#define open(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);
#define ll long long
#define ull unsigned long long
using namespace std;

ll n, p;
ll a[1000010], b[1000010];
bool pd;

IL int read();

int main()
{
//  open("number");
    n = read(); p = read();
    for (int i=1; i<=n; ++i)
    {
        a[i] = read();
        a[i] = max(a[i], a[i-1]+a[i]);
    }
    for (int i=2; i<=n; ++i)
        a[i] = max(a[i], a[i-1]);
    b[1] = a[1];
    b[2] = b[1] + a[1];
    pd = 0;
    for (int i=3; i<=n; ++i)
    {
        b[i] = b[i-1];
        if (a[i-1] > 0)
            b[i] += a[i-1];
        if (b[i] > b[1])
            pd = 1;
        if (pd) b[i] %= p;
    }
    if (pd)
        cout << b[n]%p << endl;
    else cout << b[1]%p << endl;
    return 0;
}

int read()
{
    int i = 0, j = 1;
    char x = getchar();
    while (x < '0' || '9' < x)
    {
        if (x == '-') j = -1;
        x = getchar();
    }
    while ('0' <= x && x <= '9')
    {
        i = i * 10 + x - '0';
        x = getchar();
    }
    return i*j;
}

車站分級

好像牽涉到拓撲排序(未學暫不處理)

求和

部分分方法就是枚舉開始點和結束點

滿分必須要分析數學原理,變成o(n)算法

#include<bits/stdc++.h>
#define IL inline
#define open(s) freopen(s".in", "r", stdin);// freopen(s".out", "w", stdout);
#define ll long long
#define ull unsigned long long
using namespace std;

int n, m;
int s[100005][2], sum[100005][2], c[100005], x[100005], ans;

IL int read();

int main()
{
//  open("sum5");
    n = read(); m = read();
    for (int i=1;i<=n;i++)
        scanf ("%d",&x[i]);
    for (int i=1;i<=n;i++)
    {
        scanf ("%d",&c[i]);
        s[c[i]][i%2]++;//姹傚嚭榪欎釜鍒嗙粍涓湁澶氬皯涓暟
        sum[c[i]][i%2] = (sum[c[i]][i%2] + x[i])%10007;
    }
    for (int i=1;i<=n;i++)
        ans = (ans + i * ((s[c[i]][i%2]-2) * x[i] % 10007 + sum[c[i]][i%2])) % 10007;
    printf ("%d\n",ans);//鏈€鍚庤緭鍑?
    return 0;
}

int read()
{
    int i = 0, j = 1;
    char x = getchar();
    while (x < '0' || '9' < x)
    {
        if (x == '-') j = -1;
        x = getchar();
    }
    while ('0' <= x && x <= '9')
    {
        i = i * 10 + x - '0';
        x = getchar();
    }
    return i*j;
}

推銷員

貪心水體,因為數據比較水,怎麽樣都可以過

就沒有放代碼的意義可能是錯的

9.14考試總結