比赛 |
EYOI与SBOI开学欢乐赛10th |
评测结果 |
AAAAAAAAAA |
题目名称 |
数字对数 |
最终得分 |
100 |
用户昵称 |
ZRQ |
运行时间 |
1.565 s |
代码语言 |
C++ |
内存使用 |
5.74 MiB |
提交时间 |
2022-10-10 19:34:38 |
显示代码纯文本
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<map>
- using namespace std;
- const int N=205;
- map<int,int> cnt;
- int T,n,a[N],b[N],ans;
- bool done[N];
- char ch;
- inline void read(int &x){x=0;ch=getchar();while(ch<48||ch>57)ch=getchar();while(ch>47&&ch<58)x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return ;}
- int to(int x)
- {
- int res=0;
- while(x) x/=10,++res;
- return res;
- }
- int main()
- {
- freopen("numlg.in","r",stdin);
- freopen("numlg.out","w",stdout);
- read(T);
- while(T--)
- {
- read(n);
- for(int i=1;i<=n;++i) read(a[i]),++cnt[a[i]];
- for(int i=1;i<=n;++i)
- {
- read(b[i]);
- if(cnt[b[i]]) --cnt[b[i]],done[i]=1;
- }
- for(int i=1;i<=n;++i)
- if(a[i]>9&&cnt[a[i]])
- cnt[to(a[i])]+=cnt[a[i]],ans+=cnt[a[i]],cnt[a[i]]=0;
- for(int i=1;i<=n;++i)
- {
- if(done[i]) continue;
- if(b[i]<10&&cnt[b[i]]) --cnt[b[i]],done[i]=1;
- else if(b[i]>9&&cnt[to(b[i])]) --cnt[to(b[i])],++ans,done[i]=1;
- else if(b[i]>9&&!cnt[to(b[i])]) ++ans,b[i]=to(b[i]);
- }
- for(int i=1;i<=n;++i) if(b[i]>1&&!done[i]) ++ans;
- for(int i=2;i<=9;++i) ans+=cnt[i];
- printf("%d\n",ans);
- cnt.clear();
- memset(done,0,sizeof(done));
- ans=0;
- }
- return 0;
- }