cin cout输入输出pk printf scanf
2008-04-21 23:44
411 查看
一道二份匹配的题目,
也是湖大上的一道题,在湖大提交通过,以为在杭电就顺理成章可以了,可笑的是屡交都是tle。
原来时间要求不同,在湖大5000ms,而杭电1000 ms,我倒啊@
经过修改发现一个改进点,找增广路径时性能可以优化,因为每个左边的点都只对应两个右边点。
改进后却还是只从3534ms降到1992ms,还是不行。
寻思许久,只好灵光一闪试着把cin cout 换成printf 和scnaf,最后一场激动终于发现了,好郁闷啊。
第一次遇到输出输入的影响,也许是一次提醒。。。谨记。。。
c++实现
#include <iostream>
using namespace std;
//2008.4.18
//一个二分匹配的问题
//不过每个左结点的连接边都为2
int zimu[10000][2];
bool taket[10000];
int to[10000];
int ln;
int rn;
bool canfind(int t)
{
int i;
for(i = 0; i < 2; ++i) //这是较大的改进,否则0到rn超时
{
if(!taket[zimu[t][i]])
{
taket[zimu[t][i]] = true;
if(to[zimu[t][i]] == -1 || canfind(to[zimu[t][i]]) )
{
to[zimu[t][i]] = t;
return true;
}
}
}
return false;
}
void Hashing()
{
int t;
//cin >> t;
scanf("%d", &t);
while(t--)
{
//cin >> ln >> rn;
scanf("%d%d", &ln, &rn);
int i;
for(i = 0; i < ln; ++i)
{
//cin >> zimu[i][0] >> zimu[i][1];
scanf("%d%d", &zimu[i][0], &zimu[i][1]);
}
memset(to, -1, sizeof(to));
int flag = 1;
for(i = 0; i < ln; ++i)
{
memset(taket, 0, sizeof(taket));
if(!canfind(i))
{
flag = 0;
//cout << "rehash necessary" << endl;
printf("rehash necessary/n");
break;
}
}
if(flag == 1)
//cout << "successful hashing" << endl;
printf("successful hashing/n");
}
}
int main()
{
Hashing();
return 0;
}
1672 | Cuckoo Hashing |
原来时间要求不同,在湖大5000ms,而杭电1000 ms,我倒啊@
经过修改发现一个改进点,找增广路径时性能可以优化,因为每个左边的点都只对应两个右边点。
改进后却还是只从3534ms降到1992ms,还是不行。
寻思许久,只好灵光一闪试着把cin cout 换成printf 和scnaf,最后一场激动终于发现了,好郁闷啊。
第一次遇到输出输入的影响,也许是一次提醒。。。谨记。。。
c++实现
#include <iostream>
using namespace std;
//2008.4.18
//一个二分匹配的问题
//不过每个左结点的连接边都为2
int zimu[10000][2];
bool taket[10000];
int to[10000];
int ln;
int rn;
bool canfind(int t)
{
int i;
for(i = 0; i < 2; ++i) //这是较大的改进,否则0到rn超时
{
if(!taket[zimu[t][i]])
{
taket[zimu[t][i]] = true;
if(to[zimu[t][i]] == -1 || canfind(to[zimu[t][i]]) )
{
to[zimu[t][i]] = t;
return true;
}
}
}
return false;
}
void Hashing()
{
int t;
//cin >> t;
scanf("%d", &t);
while(t--)
{
//cin >> ln >> rn;
scanf("%d%d", &ln, &rn);
int i;
for(i = 0; i < ln; ++i)
{
//cin >> zimu[i][0] >> zimu[i][1];
scanf("%d%d", &zimu[i][0], &zimu[i][1]);
}
memset(to, -1, sizeof(to));
int flag = 1;
for(i = 0; i < ln; ++i)
{
memset(taket, 0, sizeof(taket));
if(!canfind(i))
{
flag = 0;
//cout << "rehash necessary" << endl;
printf("rehash necessary/n");
break;
}
}
if(flag == 1)
//cout << "successful hashing" << endl;
printf("successful hashing/n");
}
}
int main()
{
Hashing();
return 0;
}
相关文章推荐
- eclipse C/C+ CDT中scanf、cin、 printf、cout不能debug输入输出的问题
- printf,scanf,cin,cout的输入输出
- 1062. Talent and Virtue (25) 大量输入输出 scanf printf会比cin cout 省很多时间
- 7、字符串的输入与输出scanf、printf、cin、cout、gets、puts
- cin,cout与scanf,printf的速度到底相差多少
- cin,cout与scanf,printf
- cout,cin和printf()及scanf()的比较。-------------Mobile phones---------树状数组
- cin cout scanf printf
- c/c++ cin>> cout<< scanf() printf() 返回值
- cin、cout 与 scanf、printf 的效率比较
- c++中简单的i/o操作(cin,cout,scanf,printf)
- 【C++】cin、cout的效率比scanf和printf低的解决方法
- cin,cout与scanf,printf的速度到底相差多少
- 讨论C++的cin/cout与C的scanf/printf
- 在PAT这个oj中还是scanf和printf的耗时少于cin和cout
- [笔记]cin、cout与scanf、printf的效率差异对比分析
- scanf,cin,printf,cout,putchar效率比较
- c++中简单的i/o操作(cin,cout,scanf,printf)
- 【C++】cin、cout的效率比scanf和printf低的解决方法
- C++的cin/cout为什么比C语言的scanf/printf慢