社区讨论
我去。。洛谷的标准库有毛病
P1071[NOIP 2009 提高组] 潜伏者参与者 6已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi4esrfk
- 此快照首次捕获于
- 2025/11/18 18:06 4 个月前
- 此快照最后确认于
- 2025/11/18 18:06 4 个月前
先贴AC代码,嫌麻烦的可以翻到后面
CPP#include <iostream>
#include <string.h>
using namespace std;
int main() {
int used=0,usedDec=0;
char encrypted[256],decrypted[256],target[256];
cin.getline(encrypted,250);
cin.getline(decrypted,250);
cin.getline(target,250);
int mapping[50],antiMapping[50],enc,dec;
int encLen=strlen(encrypted),i,tarLen=strlen(target);
for (i=0;i<encLen;++i) {
enc=encrypted[i]-65; dec=decrypted[i]-65;
if (enc==-52||dec==-52) break;
if ((used&(1<<enc))!=0&&dec!=mapping[enc]) {cout<<"Failed"; return 0;}
if ((usedDec&(1<<dec))!=0&&enc!=antiMapping[dec]) {cout<<"Failed"; return 0;}
used|=1<<enc; mapping[enc]=dec; usedDec|=1<<dec; antiMapping[dec]=enc;
}
if (used!=0x3FFFFFF) {cout<<"Failed"; return 0;}
for (i=0;i<tarLen;++i)
if (target[i]!=13) cout<<(char)(mapping[target[i]-65]+65);
}
第15行有一句是,if (enc==-52||dec==-52) break;
-52=13-65,也就是说,在读到13,或者说\n的时候,就会退出。
然而问题在于,为什么应该出现\n?
istream::getline里面写道:“when found in the input sequence, it is extracted from the input sequence, but discarded and not written to s.
”,也就是说,在读到\n的时候,它应该从输入流中被提取出来,然后被直接丢弃,不写入给定的字符串。
然而我在答题的过程中一直出错,百番排查后终于确定是因为返回的字符串里面多了一个\n,最后一个点的前两行明明应该是100个字符,strlen出来的长度却是101,就是因为后面多出来了一个\n。
然而并不应该是这样的。
所以说。。洛谷评测机上的标准库是炸了吗?
回复
共 5 条回复,欢迎继续交流。
正在加载回复...