2019年10月3日解決レポート

全体的なプレイ暴力を再生している
所望の\(100 + 40 + 30 = 170 \)
実際の\(100 + 40 + 10 = 180 \)
データ良心を(実際には、データがあまりにも多くの水の混乱であります

T1

最初の事は法律が、その後、まっすぐ見て、とても暴力についての検索を使用することを見つけることです

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream> 
using namespace std;

const int N = 2011;

int vis[N][N];

struct node {
    int x, y, num;
};

const int dx[8] = {-2,-2,-1,1,2,2,1,-1};
const int dy[8] = {-1,1,2,2,1,-1,-2,-2};

queue <node> q;

int sum = 0;

int main() {
    for(int T = 0; T <= 100; T++) {
        int n = T;
        sum = 0;
        memset(vis, 0, sizeof(vis));
        while(!q.empty()) q.pop();
        node st;
        st.x = 1000;
        st.y = 1000;
        vis[st.x][st.y] = 1;
        st.num = 0;
        q.push(st);
        while(!q.empty()) {
            node top = q.front();
            q.pop();
            sum++;
            for(int i = 0; i < 8; i++) {
                node tmp;
                tmp.x = top.x + dx[i]; 
                tmp.y = top.y + dy[i];
                tmp.num = top.num + 1;
                if(!vis[tmp.x][tmp.y] && tmp.x >= 0 && tmp.y >= 0 && tmp.x <= 2000 && tmp.y <= 2000 &&tmp.num <= n) {
                    vis[tmp.x][tmp.y] = tmp.num;
                    q.push(tmp);
                }
            }
        }
        cout  << sum << '\n';
    }
}

どのような法律が見つかりましたので、相違点との違いは、最初の5つの違いを見つける何を聞いて、その後、差異、または法律について質問することができない他の人が一定の違いを見つけ、直接特殊なので、特別な出力である(\ 28 \) 法律がそれを見つけるだろう

\(IF(N> 5)\ n \ \ - = 4 \)

\(a\)数组表示原数列
\(a[1] = 325\)
\(a[2] = 473\)
\(a[3] = 649\)
\(a[4] = 853\)
\(a[5] = 1085\)

\(B \)配列が差を表す
\(Bの[1] = 148 \)
\(B [2] = 176 \)
\(Bの[3] = 204 \)
\(Bの[4] = 232 \)
\( ................. \)
\(B [N-] = 120 + N-28 * \)

明らかに
\(B [2] = Bの[1] + 28 \)
\(Bの[3] = B [2] + 28 \)
\(................. ................... \)
\(B [N-] = B [N - 1] + 28 \)


\([2] - [1] = bの[1] \)
\([3] - [2] = bの[2] \)
\([4] - [3] = B [3] \)
\([5] - [4] = bの[4] \)
\(......................... .... \)
\([N] - [N - 1] = bの[N - 1] \)

加起来
\(a[2] - a[1] + a[3] - a[2] + a[4] - a[3] + .......... a[n] - a[n - 1] = b[1] + b[2] + b[3] + ......... b[n - 1]\)

与えるために、過剰な項目を削除
\を([N] -
[1] = \ sum_ {i = 1} ^ {N - 1}、B [i]は\) 設けられている\(X = \ sum_ {I = 1} ^ { N - 1} B [I] \)

そう\([N-] X = A + [1] \)
Xは、列和演算式次に、演算シーケンスである(末端の\ + FRAC最初のアイテム{} {2} *数値\)\

これは\(\ FRAC {B [1 ] + B [N - 1]} {2} *(N - 1)\)

それは(\ FRAC {B [1 \ ] + B [N - 1]} {2} *(N - 1)+ [1] \)

それに等しい(\ \ FRAC {120 + 28 + 120 + 28 *(N - 1)} {2} *(N - 1)+ 325 \)

そして、それを簡素化する、爆発するかもしれない\(ロング\ロング\) 安全な使用の\(符号なし\ロング\ロング\) およびそれを終えました

//知识点:宽搜打表找规律 
/*
By:Loceaner
找到神奇规律之后发现是等差数列…… 
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#define ull unsigned long long
using namespace std;

int T;
ull n;
ull a[5] = {1, 9, 41, 109, 205};

int main() {
    freopen("horse.in", "r", stdin);
    freopen("horse.out", "w", stdout); 
    scanf("%d", &T);
    while(T--) {
        cin >> n;
        if(n < 5) {
            cout << a[n] << "\n";
            continue;
        }
        else {
            n -= 4;
            ull ans = 120 * (n - 1) + 14 * n * (n - 1) + 325;
//          ull ans = (240 + 28 * n) / 2 * (n - 1) + 325;
            cout << ans << '\n';
        }
    }
    return 0;
}

T2

もちろん、答えは最初の質問\(N-2 ^ \)
その後、2番目の質問、。今ではないでしょう
その後、DSRジュジュコードに、私はいないだろう、半年私に言っ集まります

#include <bits/stdc++.h>
using namespace std;
const int _=1e5+7;
int n,len,k,vis[_],ans[_];
int main() {
    freopen("sensor.in","r",stdin);
    freopen("sensor.out","w",stdout);
    cin>>k;n=1<<k;
    vis[0]=1;
    for(int i=n-k+1;i<=n;++i) ans[i]=1;
    for(int i=0;i<k;++i) vis[n-(1<<i)]=1;
    for(int i=k+1,jt=0;i<=n-k;++i) {
        jt=(jt<<1)&(n-1);
        if(vis[jt]) ans[i]=1,jt|=1;
        vis[jt]=1;
    }
    printf("%d ",n);
    for(int i=1;i<=n;++i) printf("%d",ans[i]);
    return 0;
}

T3

一見すると非常に良い操作の場合ので、それは木のラインであると思いますが、15、15、オープンセグメントツリーはあるのですか?

力の無知

書き込み、その決定的な暴力を書くための時間がないと相まって、40を取りました

以下は、修正されたコードアウト暴力及び40ポイントです

//暴力啦啦啦
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

inline int read() {
    char c = getchar();
    int x = 0, f = 1;
    for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
    for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
    return x * f;
}

int r, c, q;
char a[50011][20];
char b[50011][20];

int main() {
    freopen("holiday.in", "r", stdin);
    freopen("holiday.out", "w", stdout);
    r = read(), c = read(), q = read();
    for(int i = 1; i <= r; i++) {
        scanf("%s",a[i]+1);
    }
    for(int i = 1; i <= r; i++) {
        for(int j = 1; j <= c; j++) {
            b[i][j] = '0';
        }
    }
    while(q--) {
        int cnt = 0;
        int u1 = read(), v1 = read(), u2 = read(), v2 = read();
        char col;
        cin >> col;
        for(int i = u1; i <= v1; i++) {
            for(int j = u2; j <= v2; j++) {
                b[i][j] = col;
            }
        }
        for(int i = 1; i <= r; i++) {
            for(int j = 1; j <= c; j++) {
                if(a[i][j] == b[i][j]) cnt++;
            }
        }
        cout << cnt << '\n';
    }
    return 0;
}

変更されました

おすすめ

転載: www.cnblogs.com/loceaner/p/11620647.html