Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
111103 | 陈志轩 | 复原 IP 地址 | C++ | 通过 | 100 | 0 MS | 248 KB | 1370 | 2023-11-18 10:27:20 |
#include<bits/stdc++.h> using namespace std; int n; string s,res[5]; vector <string> ans; void dfs(int x,string now,int su,int cnt){ if (cnt >= 3){ int all = res[0].size() + res[1].size() + res[2].size() + n - x; //cout<<"all:"<<all<<" n:"<<n<<'\n'; if (all != n){ return ; } //cout<<res[0]<<'.'<<res[1]<<'.'<<res[2]<<'\n'; bool qdl = true; int sum = 0; if (x >= n){ return ; } for (int i = x;i < n;i++){ if (s[i] == '0' && qdl && n - 1 - x >= 1){ return ; } else{ qdl = false; } sum = sum * 10 + s[i] - '0'; if (sum > 255 || sum < 0){ return ; } } string ss = ""; for (int i = 0;i < 3;i++){ //cout<<res[i]<<'.'; ss += res[i] + "."; } for (int i = x;i < n;i++){ //cout<<s[i]; ss += s[i]; } //cout<<'\n'; ans.push_back(ss); return ; } if (x >= n){ return ; } if (now == "0"){ res[cnt] = now; dfs(x + 1,"" + s[x],0,cnt + 1); res[cnt] = ""; return ; } su = su * 10 + s[x] - '0'; if (su >= 0 && su <= 255){ dfs(x + 1,now + s[x],su,cnt); res[cnt] = now + s[x]; dfs(x + 1,"",0,cnt + 1); res[cnt] = ""; } else{ return ; } } signed main(){ cin>>s; n = s.size(); dfs(0,"",0,0); sort(ans.begin(),ans.end()); for (int i = 0;i < ans.size();i++){ cout<<ans[i]<<'\n'; } return 0; }