智乃的数据库
先做一下总结:
由于不熟悉string而debug了一下午的代码,一道大模拟,问题出在了字符串的输入及提取上
- cin 读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据室,读入操作直接从缓冲区中取数据。
- clear会直接清空字符串,使得字符串大小为0
- 要对string类初始化大小,不然会输出s[0],s[1]···但是cout<<s<<endl是无的
以下是debug且AC的code,详解见代码
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cout << "*" << x << endl;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define lowbit(x) x &(-x);
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
typedef unsigned int ui; /// 0~(2^32)-1
typedef unsigned long long ull; ///0~(2^64)-1
const int inf = 0x3f3f3f3f;
const double eps = 1e-9;
const int P = 131; ///或者P=13331
const int N = 1e3 + 100;
const int M = 5e4 + 100;
const int mod = 1e9 + 7;
//#define int ll
int n, m, cnt, cnt1, tot, flag;
int a[N][N], lis[N], ans[N], vis[N];
string s(1000, ' '), t(1000, ' '), tmp(1000, ' '), wt;///要对string类初始化大小,不然会输出s[0],s[1]···但是cout<<s<<endl是无的
map<string, int> mp;
void init()
{
// cout << t.size() << endl;
for (int i = t.size() - 2; i >= 0; i--)
{
if (t[i] == ' ')
{
// for (int i = 0; i < cnt; i++)
// printf("%c ", tmp[i]);
// puts("");
// cout << "空格" << tmp.size() << tmp << endl;
wt = tmp.substr(0, cnt); ///截取字符串
reverse(wt.begin(), wt.end());
lis[++cnt1] = mp[wt];
// cout << wt << endl;
// cout << tmp[cnt] << endl;
break;
}
if (t[i] == ',')
{
// for (int i = 0; i < cnt; i++)
// printf("%c ", tmp[i]);
// puts("");
// cout << ",,," << tmp.size() << tmp << endl;
wt = tmp.substr(0, cnt); ///截取字符串
// tmp = tmp.substr(0, cnt);【如果这样的话,tmp原本1000的大小也会被截取,使得tmp大小变短,导致cout<<tmp<<endl无效】
// cout << "tmpsize()=" << tmp.size() << endl;
reverse(wt.begin(), wt.end());
lis[++cnt1] = mp[wt];
// cout << wt << endl;
// tmp.clear();【clear会直接清空字符串,使得字符串大小为0】
// cout << "tmp球球了" << tmp.size() << endl;
cnt = 0;
tmp[cnt] = t[--i];
// cout << tmp[cnt] << endl;
cnt++;
}
else
{
tmp[cnt] = t[i];
// cout << tmp[cnt] << endl;
cnt++;
}
}
sort(lis + 1, lis + 1 + cnt1);
// for (int i = 1; i <= cnt1; i++)
// cout << lis[i] << endl;
}
void AC()
{
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> s;
mp[s] = i;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
cin.get(); ///
getline(cin, t);
init();
fill(ans, ans + 1001, 1);
for (int i = 1; i <= n; i++)
{
if (vis[i])
continue;
vis[i] = 1;
tot++;
for (int j = i + 1; j <= n; j++)
{
if (vis[j])
continue;
bool f = 1;
for (int k = 1; k <= cnt1; k++)
{
if (a[i][lis[k]] != a[j][lis[k]])
{
f = 0;
break;
}
}
if (f)
{
vis[j] = 1;
ans[tot]++;
}
}
}
cout << tot << endl;
for (int i = 1; i <= tot; i++)
cout << ans[i] << " ";
}
signed main()
{
IOS;
int _ = 1;
while (_--)
AC();
return 0;
}
/// |\_/|
/// | @ @ Woof!
/// | <> _
/// | _/\------____ ((| |))
/// | `--' |
/// ____|_ ___| |___.'
/// /_/_____/____/_______|
/// I am here to guard this code, woof!
版权声明:本文为qq_51201910原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。