潜水的蒟蒻 @ 2020-03-24 10:15:41
#pragma GCC optimize(3,"Ofast","inline")//日常优化
#include<bits/stdc++.h>//标准头文件
using namespace std;//必要格式
int ans[10000000],k,n;//ans记录压缩码,k记录压缩码储存的下标同时表示压缩码个数,n记录总共有多少个字符
char a,t='0';//a为当前输入,t为上一个输入,用于比较是否变化
int main()//烤main包
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
while(cin>>a)//只要输入a(cin不读取空格和换行)
{
if(a!=t)//如果a和上一个字符不同
{
if(k==0)k++;//如果第一个读入字符是1,则0需要一个保存
k++;//进入到下一个压缩码的储存,压缩码个数增加
ans[k]++;//更新压缩码
t=a;//更新上一个字符
}
else ans[k]++;//不然就更新压缩码
n++;//字符数增加
}
cout<<sqrt(n);//对字符数开根就是矩阵边长,输出边长
for(int i=1;i<=k;i++)cout<<" "<<ans[i];//输出压缩码
//fclose(stdin);
//fclose(stdout);
return 0;//祈祷AC
}
除了#7#8以外都不能过的代码如下:
#pragma GCC optimize(3,"Ofast","inline")//日常优化
#include<bits/stdc++.h>//标准头文件
using namespace std;//必要格式
int ans[10000000],k;//ans记录压缩码,k记录压缩码储存的下标同时表示压缩码个数
char a,t='5';//a为当前输入,t为上一个输入,用于比较是否变化
int main()//烤main包
{
while(cin>>a)//只要输入a(cin不读取空格和换行)
{
if(a!=t)//如果a和上一个字符不同
{
k++;//进入到下一个压缩码的储存,压缩码个数增加
ans[k]++;//更新压缩码
t=a;//更新上一个字符
}
else ans[k]++;//不然就更新压缩码
}
int n=0;for(int i=1;i<=k;i++)n+=ans[i];//记录总共有多少个字符
cout<<sqrt(n);//对字符数开根就是矩阵边长,输出边长
for(int i=1;i<=k;i++)cout<<" "<<ans[i];//输出压缩码
return 0;//祈祷AC
}
这两份代码究竟该怎么操作才能合并在一起?
求助,哪位大佬能点拨一下吗?
红题又爆了555
by 潜水的蒟蒻 @ 2020-03-24 10:16:11
MD好像没用好。。。。