文章

1

粉丝

0

获赞

0

访问

64

头像
IP地址方案数 题解:
P1897 天津大学机试
发布于2025年8月5日 00:20
阅读数 64

dfs,u控制每次枚举的是A、B、C还是D,对于每个枚举的结果check函数去检查是否符合题意

#include<bits/stdc++.h>
using namespace std;
int n,cnt;
string s;
vector<int> id;

bool check(){
    int ans = 0;
    for (int i = 0; i < 4; ++i)
        ans += id[i];

    if(ans != s.size()) return false;
    
    size_t p = 0;
    for(int i = 0;i < 4;i++){
        int len = id[i];
        string s1 = s.substr(p,len);
        int num = stoi(s1) ;
        if(num > 255) return false;
        if(to_string(num) != s1) return false;
        p += len;
    }
    return true;
}
void dfs(int u){
    if(u == 4){
        if(check()) cnt ++;
        return;
    }

    for(int i = 1;i <= 3;i++){
        id.push_back(i);
        dfs(u + 1);
        id.pop_back();
    }
}
int main(){
    cin>>n;
    while(n--){
        cin>>s;
        cnt = 0;
        dfs(0);
        cout<<cnt<<endl;
    }

    return 0;
}
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发