40分求助!!!
查看原帖
40分求助!!!
539529
王君诺弈!悟!楼主2021/10/31 20:15

刚才发错了(

rt,本蒟蒻实在看不出哪里有问题。

思路就是模拟,以四个为一周期,用a数组记录筛子的状态

#include<bits/stdc++.h>
using namespace std;
int r,c,a[5][5]={{0,5,0},{4,1,3,6},{0,2,0}},ans[100005][15],sum[100005],fx=0;
long long summ;
int main(){
    cin>>r>>c;
    if(!(r&&c)){
        cout<<0;
        return 0;
    }
    for(int i=0;i<r;++i){
        if(fx==0){
            for(int j=0;j<4;++j){
                ans[i][j]=a[1][1];
                //cout<<ans[i][j];
                swap(a[1][3],a[1][0]); swap(a[1][3],a[1][1]); swap(a[1][3],a[1][2]);
            }
            fx=1;
        }else{
            for(int j=3;j>=0;--j){
                ans[i][j]=a[1][1];
                //cout<<ans[i][j];
                swap(a[1][1],a[1][0]); swap(a[1][1],a[1][3]); swap(a[1][1],a[1][2]);
            }
            fx=0;
        }
        //cout<<endl;
        if(!i%2){
            for(int j=3;j>=c%4;j--){swap(a[1][3],a[1][0]); swap(a[1][3],a[1][1]); swap(a[1][3],a[1][2]);}
        }else{
            for(int j=0;j<c%4;j++){swap(a[1][1],a[1][0]); swap(a[1][1],a[1][3]); swap(a[1][1],a[1][2]);}
        }
        sum[i]=c/4*(a[1][0]+a[1][1]+a[1][2]+a[1][3]);
        if(!i%2){
            for(int j=0;j<c%4;++j){
                sum[i]+=ans[i][j];
            }
        }
        else{
            for(int j=3;j>=4-c%4;--j){
                sum[i]+=ans[i][j];
            }
        }
        //cout<<a[1][0]<<a[1][1]<<a[1][2]<<a[1][3]<<endl;
        swap(a[1][1],a[0][1]); swap(a[1][3],a[2][1]);
    }
    for(int i=0;i<r;++i){

        summ+=sum[i];
    }
    cout<<summ;
    return 0;
}
```cpp
2021/10/31 20:15
加载中...