【补】2022.7.9———HZOI【这次应该叫高二上几调】划水记

Write In Front

T1 math T2 biology T3 english

注释(调试信息)较多,可以放到本地删掉食用qwq

成绩综述

菜鸡25/38名qAq

T1math

这个题打表得的;然而刚开始没看出来,之后才发现有下发文件(样例),然后就把表打出来了   然而赛时被卡了5分,因为当时shabn==1的时候忘了一些东西

一道裴蜀定理?不过我直接打的表

打表出规律,慢慢推趴

先求出aigcd,然后再和模数求一个gcd

然后大力分类讨论

如果gcd==1

  直接输出0~mod1

如果gcd1

  那么输出从0~mod1的所有gcd的倍数(还是0~mod的?忘掉了)

我把n==1的特判了一下,

赛时代码不挂了 跟AC代码几乎一样  我怕误人子弟

T1

/*#include <iostream>
#include <iomanip>
#define GMY (520&1314)
// #define ll long long
#define re register int
#define MARK cout << "### "
#define _MARK "@@@ "
#define LMARK "~~~ "
#define char_phi signed
#define _ cout << " "
#define Endl cout << endl
#define N 500005
#define K 100005
using namespace std; 
long long n, mod;
long long a[N], cnt[K], ans[K];// ans[]优化常数()
#define Fastio
void Fastio_setup(){
    #ifdef Fastio
    ios::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
    #endif
}
long long gcd(int xx, int yy){
    return ((xx%yy == 0) ? (yy) : (gcd(yy, xx%yy)));
}
void work(){
    // 乍一看没有思路
    // 然后还是没有思路
    // 然后想到模数,然后觉得还是没有思路
    // 通通好像讲过类似的
    // 不过那是证明题
    // 然后,我猜啊,如果a序列们都是互质的,k以内的基本都能被表示吧?
    // 这是个CRT好像
    // 不过我不会CRT,当初也没做几个题
    // 所以我打算先拿5~6那个点的分
    // 然后暴力骗分 小用clock一把
    // 那5~6的点我怎么拿分呢..这就比较显然了..
    // 然后要开long long应该是
    // 沃日!打表大法好!!!
    // 我发现了,如果两个数ai, k满足 k%ai == 0,那么就可以表示从a到k所有a的倍数(除了b以外)
    // 然后如果k%ai != 0, 如果ai和k有gcd,那就可以表示从0到k的所有gcd的倍数
    // 然后如果k和ai互质,那么就可以表示从0~k-1的所有整数了!
    // 好耶,累计cnt然后最后判一下cnt[i] == n就行了
    // 然后分析一下时间复杂度
    // O(n*k)左右(比这个小一点点趴)
    // e 完了,用CRT会优化掉(因为有了一大堆模数) 那个k(差不多)
    // 但您m我CRT忘掉了阿!
    // 所以先打这个【暴力】上去
    // 大概能拿70~80pts左右?(如果我没推错的话)
    // 沃日,忽然发现ai可能大于k..
    cin >> n >> mod;
    // 寄 忘了∑这回事了
    // 那以下的代码只能拿5~6的点的分..
    if(n == 1){// 卑微
        for(re i = 1, ai, gcder, lmt, rs ; i <= n ; ++ i){
            cin >> ai;
            if(ai >= mod) ai %= mod;
            if(ai == 0){// 您模数要成0了
                // goto Char_phi;
                continue;
            }
            if(mod % ai == 0){// 情况一
                lmt = (mod/ai);// 加1以防万一
                for(long long j = 1 ; j <= lmt ; ++ j){
                    rs = (j*ai) % mod;
                    ++ cnt[rs];
                    // cout << rs << " ";
                }
                // Endl;
                continue;
            }
            gcder = gcd(ai, mod);
            if(gcder == 1){// 互质
                for(re j = 1 ; j <= mod ; ++ j){
                    ++ cnt[j];
                }
            }
            else {// gcder
                lmt = (mod/gcder);
                for(re j = 1 ; j <= lmt ; ++ j){// 忽然想到Chen_jr("陈钩R"()()())
                    rs = (gcder*j) % mod;
                    ++ cnt[rs];
                    // cout << rs << " ";
                }
                // Endl;
            }
        }
        // cout << 
        ans[0] = 1, ans[1] = 0;
        for(re i = 1 ; i <= mod ; ++ i){
            // cout << cnt[i] << " ";
            if(cnt[i] == n){
                // cout << i << _;
                ans[++ ans[0]] = i;
            }
        }
        // Endl;
        cout << ans[0] << endl;
        for(re i = 1 ; i <= ans[0] ; ++ i)
            cout << ans[i] << " ";
    }
    else {// 还是之前那个,暴力搞分
        // 蒟蒻有了新的想法
        // 为什么不写出来暴力然后打个表呢?
        // 啧 暴力也不好写 暴力要用到基础XIN队..
        // 我先回教室拿趟水杯,顺便清醒清醒思路
        // 19:51 回来了
        // 思路没清晰多少,外面太热了
        // 然后决定连基础XIN队也不打,直接打一个拓展XIN队走了
        bool same = true;
        for(re i = 1 ; i <= n ; ++ i){
            cin >> a[i];
            if(i != 1 && a[i] != a[i-1]) same = false;
        }
        if(same == true){
            long long lmt = mod / a[1];
            if(mod % a[1] == 0) lmt--;
            cout << lmt << endl;
            cout << "0 ";
            for(long long i = 1 ; i <= lmt ; ++ i)
                cout << (i*a[1]) % mod << " ";
        }
        else {// 拓展XIN队
            cout << mod << endl;
            for(re i = 0 ; i <= mod-1 ; ++ i){
                cout << i << " ";
            }
        }
    }
    // 好就这样吧去开T2
    return ;
    // Char_phi:{
    //     cout << "1" << endl;
    //     cout << "0" << endl;
    // }
}
#define IXINGMY
char_phi main(){
    #ifdef IXINGMY
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    #endif
    Fastio_setup();
    work();
    return GMY;
}*/
#include <iostream>
#include <iomanip>
#define GMY (520&1314)
#define ll long long
#define re register int
#define MARK cout << "### "
#define _MARK "@@@ "
#define LMARK "~~~ "
#define char_phi signed
#define _ cout << " "
#define Endl cout << endl
#define N 500005
#define K 100005
using namespace std;
long long n, mod, gcdd;
#define Fastio
void Fastio_setup(){
    ios::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
}
long long gcd(long long xx, long long yy){
    return ((xx%yy == 0) ? (yy) : (gcd(yy, xx%yy)));
}
void work(){
    // 沃日你爹
    // 还是%打表大法
    // 幸亏发了样例
    // 诶呦,舒服
    // 先找出ai的共同gcd
    // 然后和我刚才那个一样
    cin >> n >> mod;
    if (n == 1){
        int rs; cin >> rs;
        if(rs >= mod) rs %= mod;
        gcdd = gcd(rs, mod);
        if(gcdd == 1){
            cout << mod << endl;
            for(long long i = 0 ; i <= mod-1 ; ++ i)
                cout << i << " ";
        }
        else if(mod % rs == 0){
            int lmt = (mod/rs) - 1;
            cout << (lmt+1) << endl;
            cout << "0 ";
            for(long long i = 1 ; i <= lmt ; ++ i)
                cout << i*rs << " ";
        }
        else {
            int lmt = mod/gcdd;
            cout << lmt << endl;
            -- lmt;
            cout << "0 ";
            for(long long i = 1 ; i <= lmt ; ++ i)
                cout << i*gcdd << " ";// 嘖!我是sb
        }
        return ;
    }
    for(re i = 1, rs ; i <= n ; ++ i){
        cin >> rs;
        if(i == 1){
            gcdd = rs;
            continue;
        }
        gcdd = gcd(gcdd, rs);
    }
    if(gcdd >= mod) gcdd %= mod;
    gcdd = gcd(gcdd, mod);
    if(gcdd == 1){
        cout << mod << endl;
        for(long long i = 0 ; i <= mod-1 ; ++ i)
            cout << i << " ";
    }
    else {
        // MARK;
        long long lmt = (mod/gcdd);
        // cout << lmt << endl;
        // cout << mod << " " << gcdd << endl;
        cout << lmt << endl;
        if(mod % gcdd == 0) -- lmt;
        for(long long i = 0 ; i <= lmt ; ++ i){
            cout << i*gcdd << " ";
        }
    }
}
// #define IXINGMY
char_phi main(){
    #ifdef IXINGMY
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    #endif
    Fastio_setup();
    work();
    return GMY;
}

 

T2biology

不会,颓了一篇题解

T2
 

#include <iostream>
#include <iomanip>
#include <algorithm>
#define GMY (520&1314)
#define char_phi signed
#define re register int
#define MARK cout << "###"
#define Endl cout << endl
#define _MARK "@@@"
#define LMARK "~~~&&&"
#define _ " "
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define N 2005
using namespace std;
#define int long long// 典中典
int n, m, cnt, qwq, tmp, on(-1145141919), tw(-1145141919), th(-1145141919), fo(-1145141919), final_ans;
int f[N*N];
struct node{
    int x, y, a, b;
    friend bool operator <(node A, node B){
        return A.a < B.a;
    }
}cp[N*N];
void Fastio_setup(){
    ios::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
}
void work(){
    /*// 因爲之前的註釋太長了所以縮進來摺疊一下
        // 可惡..為什麼這麼頹!
        // 我也不想頹,但是就是那種根本無法抗拒的頹
        // 然後就到這個題了..這個題聽kaguya講的好像很簡單的亞子|·w·)
        // 建議把體面吃透再做題 要麼會一直頹
        // 然後很重要的有個k...
        // 有零說零我覺得fengwu大佬雖然好強但是他的代碼俺讀不懂。。
        // 所以看了這位大佬的博客https://blog.csdn.net/qq_54674614/article/details/118658128?ops_request_misc=&request_id=&biz_id=102&utm_term=noip%20math%20biology%20english&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-118658128.142^v32^pc_search_result_control_group,185^v2^control&spm=1018.2226.3001.4187
        // 內容詳實,使人贊歎!
        // ——————————————————————————————————————————————————
        // 然後這個題,k不重要,這樣例也差點給我整迷糊了,不是k的事,是單增的事
        // 所以額 老實頹題解
        // —————————————————————幾天後————————————————————————
        // 放了幾天暑假回來。。。
        // 誒呀,這⌈獨立⌋的防空,多麼好事情..
    */
    // ——————————————————————————————————————————————————
    // T2 biology
    // 無聊の跳蚤國國王。。。
    // 慎終如始 則無敗事
    cin >> n >> m;
    for(re i = 1 ; i <= n ; ++ i){
        for(re j = 1 ; j <= m ; ++ j){
            cin >> cp[++ cnt].a;
            if(cp[cnt].a == 0) cp[cnt].a = 1145141919;
            cp[cnt].x = i, cp[cnt].y = j, f[cnt] = -1145141919;// 
        }
    }
    qwq = cnt;
    cnt = 0;
    for(re i = 1 ; i <= n ; ++ i)
        for(re j = 1 ; j <= m ; ++ j)
            cin >> cp[++ cnt].b;
    sort(cp+1, cp+cnt+1);
    while(cp[qwq].a == 1145141919) qwq --;
    tmp = qwq;
    while(cp[tmp].a == cp[qwq].a) f[qwq] = cp[qwq].b, qwq --;
    int j;
    // cout << "qwq: " << qwq << endl;
    for(re i = qwq ; i >= 1 ; -- i){
        if(cp[i].a == cp[i+1].a) goto CHAR_PHI;
        j = i+1;
        while(cp[j].a == cp[i+1].a){
            on = MAX(on, f[j]-cp[j].x-cp[j].y);
            tw = MAX(tw, f[j]+cp[j].x-cp[j].y);
            th = MAX(th, f[j]-cp[j].x+cp[j].y);
            fo = MAX(fo, f[j]+cp[j].x+cp[j].y);
            ++ j;
        }
        CHAR_PHI:{
            // MARK, Endl;
            f[i] = MAX(f[i], on+cp[i].x+cp[i].y);
            f[i] = MAX(f[i], tw-cp[i].x+cp[i].y);
            f[i] = MAX(f[i], th+cp[i].x-cp[i].y);
            f[i] = MAX(f[i], fo-cp[i].x-cp[i].y);
            f[i] += cp[i].b;
        }
    }
    // cout << cnt << _ << n*m << endl;
    for(re i = 1 ; i <= cnt ; ++ i){
        if(cp[i].a != cp[1].a) break;
        final_ans = MAX(final_ans, f[i]);
    }
    cout << final_ans;
}
// #define IXINGMY
char_phi main(){
    Fastio_setup();
    #ifdef IXINGMY
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    #endif
    work();
    return GMY;
}

 

T3english

不会,咕掉

posted @   char_phi  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示