注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

看 和 说  

2014-03-18 22:19:40|  分类: STL ACM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
看和说系列定义如下:以数字字符串作为这个系列中的第一个元素。每个随后的元素
是对它前面一个数字的口头描述。比如,字符串 122344111 可以被描述成“1 个 1,2 个 2,
1 个 3,2 个 4,3 个 1”。因此,122344111 应该写成 1122132431。类似地,字符串 1111111111
可以写成 101.
2.输入描述
输入中包含多个测试案例。第一行是测试案例的个数。每个测试案例多达 1000 位。
3.输出描述
对于每个测试案例,打印按题意要求的字符串。
4.输入样例
3
122344111
1111111111
12345
5.输出样例
1122132431
101
1112131415


#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
ifstream cin("aaa.txt");
string s,t;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
int c=0;
t=s[0];
int temp=0;
for(int j=0;j<s.size();j++)
{
if(s[j]==t[0]{
temp++;
//如果已是最后一个,直接输出
if(j==s.size()-1)
{
//cout<<temp<<t[0];
printf("%d%c",temp,t[0]);
}
}
else
{
//cout<<temp<<t[0];
printf("%d%c",temp,t[0]);
t[0]=s[j];
temp=1;
//如果已是最后一个,直接输出
if(j==s.size()-1)
{
//cout<<temp<<t[0];
printf("%d%c",temp,t[0]);
}
}
}
cout<<endl;
}
return 0;
}

本题是处理重复子串的问题。虽然输入的都是数字,但应当把它们当成字符串来处理。
由于本题时限一秒,每个字符串的长度多达 1000 位,所以,不好的算法容易超时。
scanf 和 printf 所用的时间大大少于 cin 和 cout 所消耗的时间。由于本题需要频繁输出,
采用 cout 则会超过一秒;而使用 printf 则不会超过一秒。这点是 ACM 竞赛中节约时间的
常识。一般地,由于 cin 和 cout 调试很方便,所以调试期间使用它们,但是提交判题系统
后,如果发现超时,可尝试将 cin 和 cout 改为 scanf 和 printf,看看是不是由于输入输出过于频繁而导致的

  评论这张
 
阅读(15)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017