社区讨论

有没有哪个神犇教一下我怎么改?

P9752[CSP-S 2023] 密码锁参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo1jzp2f
此快照首次捕获于
2023/10/22 22:17
2 年前
此快照最后确认于
2023/11/02 11:46
2 年前
查看原帖
不知为什么,数据一输出81我输出26
CPP
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9;
//计算两个密码之间的距离
int calculateDistance(const vector<int>&a,const vector<int>&b) 
{
    int distance=0;
    for(int i=0;i<5;i++) 
	{
        int diff=abs(a[i]-b[i]);
        distance+=min(diff,10-diff);
    }
    return distance;
}
//枚举所有可能的密码
vector<vector<int>> generateAllPasswords() 
{
    vector<vector<int>> passwords;
    for(int a=0;a<=9;a++) for(int b=0;b<=9;b++) for(int c=0;c<=9;c++) for(int d=0;d<=9;d++) for(int e=0;e<=9;e++) passwords.push_back({a,b,c,d,e});
    return passwords;
}
int main() 
{
    int n;
    cin>>n;
    vector<vector<int>> states(n,vector<int>(5));
    for(int i=0;i<n;i++) for(int j=0;j<5;j++) cin>>states[i][j];
    vector<vector<int>> passwords=generateAllPasswords();
    set<int> validPasswords;
    for(int i=0;i<n;i++) 
	{
        set<int> possiblePasswords;
        for(int j=0;j<passwords.size();j++) 
		{
            int distance=calculateDistance(states[i],passwords[j]);
            possiblePasswords.insert(distance);
        }
        if(!i) validPasswords=possiblePasswords;
    	else 
		{
            set<int> newValidPasswords;
            for(int distance:validPasswords) if(possiblePasswords.count(distance)) newValidPasswords.insert(distance); 
            validPasswords=newValidPasswords;
        }
    }
    cout<<validPasswords.size();
}

尽可能地将注释标了上去,还请各位神犇多多指教

回复

2 条回复,欢迎继续交流。

正在加载回复...