社区讨论
关于输入
P3952[NOIP 2017 提高组] 时间复杂度参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mdssa78w
- 此快照首次捕获于
- 2025/08/01 20:12 7 个月前
- 此快照最后确认于
- 2025/11/04 05:54 4 个月前
这份代码的输入会读入一些不正常的东西,求 dalao 改改。
CPP#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
ll T, l, num, cnt;
string O;
string s[110];
unordered_map<char, bool> name;
bool CheckSyntaxError(){
ll cntF = 0;
for(ll i = 1; i <= l; i++){
if(s[i][1] == 'F') cntF++;
if(s[i][1] == 'E'){
if(!cntF) return 1;
cntF--;
}
}
if(cntF > 0) return 1;
//--------------------------end 和 for 不匹配--------------------------
name.clear();
for(ll i = 1; i <= l; i++){
if(s[i][1] == 'F'){
if(name[s[i][3]] == 1) return 1;
name[s[i][3]] = 1;
}else
for(ll j = i - 1; j >= 1; j--)
if(s[j][1] == 'F'){
name[s[j][3]] = 0;
break;
}
}
//--------------------------变量名冲突--------------------------
return 0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
cin >> T;
while(T--){
cin >> l; getchar();;
getline(cin, O), O = '_' + O;
for(ll i = 1; i <= l; i++) getline(cin, s[i]), s[i] = '_' + s[i], getchar();
if(CheckSyntaxError()){
cout << "ERR\n"; continue;
}
ll num = 0;
if(O[3] == '1') goto egg;
for(ll i = 5; ; i++){
if(!isdigit(O[i])) break;
num = num * 10 + (O[i] - '0');
}
egg:;
// 输入的时间复杂度为 O(n^num)
ll real = 0;
for(ll i = 1; i <= l; i++){
if(s[i][1] == 'E') continue;
ll a = 1, b = 1;
ll now = 1;
for(ll j = 5; j < s[i].size(); j++){
if(s[i][j] == 'n'){
if(now == 1) a = 9e18, now++;
else b = 9e18;
}else if(isdigit(s[i][j]))
if(now < 2) now++;
}
if(a == 1 && b > 1) real++;
}
// 实际的时间复杂度为 O(n^real)
if(num == real) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...