85pts,能改吗?
查看原帖
85pts,能改吗?
547908
NightTide楼主2021/10/3 10:40
#include<bits/stdc++.h>
#define MAXM 40000
using namespace std;
struct times{
    int a_times,b_times,c_times,d_times;
};
struct node{
    int val;
    int num;
};
node magic[MAXM];
int n,m;
namespace get_35pts{
    times ans[MAXM];
    bool cmp(node a,node b){
        return a.val<b.val;
    }
    void main(){
        sort(magic+1,magic+m+1,cmp);
        // cout<<"--------------------------------"<<endl;
        // for(int i=1;i<=m;i++){
        //     cout<<magic[i].num<<" "<<magic[i].val<<endl;
        // }
        for(register int a=1;a<=m;a++){
            for(register int b=a+1;b<=m;b++){
                for(register int c=b+1;c<=m;c++){
                    for(register int d=c+1;d<=m;d++){
                        int dif1,dif2,dif3;
                        dif1=magic[b].val-magic[a].val;
                        dif2=magic[d].val-magic[c].val;
                        dif3=magic[c].val-magic[b].val;
                        if(!(dif1&&dif2&&dif3)) continue;
                        // cout<<"---------------------------"<<endl;
                        // cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
                        // cout<<magic[a].num<<" "<<magic[b].num<<" "<<magic[c].num<<" "<<magic[d].num<<endl;
                        // cout<<dif1<<" "<<dif2<<" "<<dif3<<endl;
                        if(dif1*3<dif3&&dif1==2*dif2){
                            // cout<<"-------------------"<<endl;
                            // cout<<magic[a].val<<" "<<magic[b].val<<" "<<magic[c].val<<" "<<magic[d].val<<endl;
                            ans[magic[a].num].a_times++;
                            ans[magic[b].num].b_times++;
                            ans[magic[c].num].c_times++;
                            ans[magic[d].num].d_times++;
                        }
                    }
                }
            }
        }
        for(register int i=1;i<=m;i++){
            printf("%d %d %d %d\n",ans[magic[i].val].a_times,ans[magic[i].val].b_times,ans[magic[i].val].c_times,ans[magic[i].val].d_times);
        }
    }
}
namespace strenge_things{
    times ans[MAXM];
    int vis[MAXM];
    void main(){
        // sort(magic+1,magic+m+1,cmp);
        // cout<<"--------------------------------"<<endl;
        // for(int i=1;i<=m;i++){
        //     cout<<magic[i].num<<" "<<magic[i].val<<endl;
        // }
        for(int i=1;i<=m;i++){
            vis[magic[i].val]++;
        }
        for(register int a=1;a<=n;a++){
            if(!vis[a]) continue;
            for(register int b=a+1;b<=n;b++){
                if(!vis[b]) continue;
                for(register int c=b+1;c<=n;c++){
                    if(!vis[c]) continue;
                    if((b-a+2*c)%2) continue;
                    int d=(b-a+2*c)/2;
                    int dif1=b-a,dif2=c-b;
                    if(dif1*3<dif2){
                        ans[a].a_times+=vis[b]*vis[c]*vis[d];
                        ans[b].b_times+=vis[a]*vis[c]*vis[d];
                        ans[c].c_times+=vis[a]*vis[b]*vis[d];
                        ans[d].d_times+=vis[a]*vis[b]*vis[c];
                    }
                    // for(register int d=c+1;d<=n;d++){
                    //     if(!vis[d]) continue;
                    //     int dif1,dif2,dif3;
                    //     dif1=b-a;
                    //     dif2=d-c;
                    //     dif3=c-b;
                    //     // cout<<"---------------------------"<<endl;
                    //     // cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
                    //     // cout<<magic[a].num<<" "<<magic[b].num<<" "<<magic[c].num<<" "<<magic[d].num<<endl;
                    //     // cout<<dif1<<" "<<dif2<<" "<<dif3<<endl;
                    //     if(dif1*3<dif3&&dif1==2*dif2){
                    //         ans[a].a_times+=vis[b]*vis[c]*vis[d];
                    //         ans[b].b_times+=vis[a]*vis[c]*vis[d];
                    //         ans[c].c_times+=vis[a]*vis[b]*vis[d];
                    //         ans[d].d_times+=vis[a]*vis[b]*vis[c];
                    //     }
                    // }
                }
            }
        }
        for(register int i=1;i<=m;i++){
            printf("%d %d %d %d\n",ans[magic[i].val].a_times,ans[magic[i].val].b_times,ans[magic[i].val].c_times,ans[magic[i].val].d_times);
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(register int i=1;i<=m;i++){
        scanf("%d",&magic[i].val);
        magic[i].num=i;
    }
    strenge_things::main();
    return 0;
}
/*
test #1:
    input:
        30 8
        1
        24
        7
        28
        5
        29
        26
        24
    output:
        4 0 0 0
        0 0 1 0
        0 2 0 0
        0 0 1 1
        1 3 0 0
        0 0 0 2
        0 0 2 2
        0 0 1 0
--------------------------
test #2:
    input:
        15 15
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
    output:
        5 0 0 0
        4 0 0 0
        3 5 0 0
        2 4 0 0
        1 3 0 0
        0 2 0 0
        0 1 0 0
        0 0 0 0
        0 0 0 0
        0 0 1 0
        0 0 2 1
        0 0 3 2
        0 0 4 3
        0 0 5 4
        0 0 0 5
*/
2021/10/3 10:40
加载中...