答案错误---P7116
  • 板块学术版
  • 楼主NEX357
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/8 22:28
  • 上次更新2023/11/9 11:52:00
查看原帖
答案错误---P7116
549720
NEX357楼主2023/11/8 22:28

https://www.luogu.com.cn/problem/P7116 答案错误,其中的list在样例1里面限制最大为3,但在跑的时候list有的项超出了3,不知道为什么(小学生打暴力打不来) 大致思路是:用run函数确定每次的位置,然后暴力计算步数,最后加起来

//walk
#include<iostream>
#define ll long long
using namespace std;
const int N=1e6+10;
const ll mod=1e9+7;
ll n,k,sum=0;
ll a[N],w[N],c[N],d[N];
inline bool check(ll list[]){
    for(ll i=1;i<=k;i++){
        if(list[i]<1||list[i]>w[i]){
            return false;
        }
    }
    return true;
}
inline void run(ll list[],ll deep){
    //cout<<deep<<' '<<list[1]<<' '<<list[2]<<endl;
    if(deep!=k){
        for(ll i=1;i<=w[deep+1];i++){
            //cout<<"  "<<list[1]<<' '<<list[2]<<endl;
            list[deep+1]=i;
            //cout<<deep+1<<' '<<i<<endl;
            //cout<<deep+1<<' '<<list[1]<<' '<<list[2]<<endl;
            run(list,deep+1);
        }
        return;
    }
    ll tmp=0;
    //cout<<check(list)<<' ';
    //cout<<list[1]<<' '<<list[2]<<endl;
    do{
        list[c[tmp%n]]+=d[tmp%n];
        tmp++;
    }while(check(list));
    sum+=tmp;
    //cout<<tmp<<endl;
    return;
}
int main(){
    cin>>n>>k;
    for(ll i=1;i<=k;i++){
        cin>>w[i];
    }
    for(ll i=0;i<n;i++){
        cin>>c[i]>>d[i];
    }
    //cout<<"test"<<w[1]<<' '<<w[2]<<endl;
    for(ll i=1;i<=w[1];i++){
        a[1]=i;
        run(a,1);
    }
    cout<<sum%mod;
    return 0;
}
2023/11/8 22:28
加载中...