`
isiqi
  • 浏览: 16345628 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

STL快速解题

 
阅读更多

http://ac.jobdu.com/problem.php?pid=1402 特殊的数

#include<iostream>
#include<bitset>
#include<cstdio>
using namespace std;

void read(int &data)     //快速读取数据
{
 char ch = getchar();
 while (ch < '0' || ch > '9')
	 ch = getchar();
 data = 0;
 do
 {
  data = data*10 + ch-'0';
  ch = getchar(); 
 }while (ch >= '0' && ch <= '9');
}

int main(void)
{
	int n,i,m,max,num,min;
	bitset<1000001> bits,b;

	while(scanf("%d",&n)!=EOF)
	{
		bits.reset();    //清空
		b.reset();
		max=-1;
		min=1000001;
		for(i=0;i<n;i++)
		{
			//scanf("%d",&m);
			read(m);
			if(m>max)
				max=m;
			if(m<min)
				min=m;
			if(bits[m]==0)    //这个数字第一次出现
				bits[m]=1;
			else if(bits[m]==1 && b[m]==0)   //这个数字第二次出现
				b[m]=1;
			//超过两次以上出现的数字不用在进行赋值操作了
		}
		num=0;
		for(i=min;i<=max;i++)
		{
			if(bits[i]==1 && !b[i])    //只出现了一次
				num++;
		}
		//num=bits.count()-b.count();

		printf("%d\n",num);
		if(num)
		{
			m=0;
			for(i=min;i<=max;i++)
			{
				if(b[i]==0 && bits[i]==1)
				{
					if(m==0)
					{
						printf("%d",i);
						m++;
					}
					else
					{
						printf(" %d",i);
						m++;
					}
					if(m==num)
					{
						printf("\n");
						break;
					}
				}
			}
		}
	}
	return 0;
}

http://ac.jobdu.com/problem.php?pid=1403 神奇的开关http://poj.org/problem?id=1176

#include<iostream>
#include<queue>
#include<cstdio>
#include<string>
#include<set>
using namespace std;
#include<memory.h>

struct node  
{
	string name;  //定义一个优先队列
	friend bool operator<(node a,node b)
	{
		return a.name > b.name;   //小到大(字典序)
	}
}w;

string str;
priority_queue<node > q;

set<string>myset;
int ON[101],OFF[101],n,i,j,k,p,r,t;
bool pos[101];

inline void solve()
{
	int h;
	if(i)
		memset(pos,false,sizeof(pos));
	else  //开
		memset(pos,true,sizeof(pos));
	if(j)    //奇数的灯改变状态
	{
		for(h=1;h<=n;h+=2)
			pos[h] ^=1;    //跟 pos[h] =1- pos[h];  是等效的
	}
	if(k)    //偶数的灯改变状态
	{
		for(h=1;h<=n;h++)
		{
			if((h&1)==0)    //由于==的优先级比与运算的优先级别要高,所以与运算需要加括号,导致了多次WA
				pos[h] ^=1;
		}
	}
	if(p)    //编号为(3 * K + 1)(K>=0)的灯改变状态
	{
		for(h=1;h<=n;h+=3)
		{
			if(h%3==1)
				pos[h] ^=1;
		}
	}
	for(h=0;h<r;h++)
	{
		if(!pos[ON[h]])
			return ;
	}
	for(h=0;h<t;h++)
	{
		if(pos[OFF[h]])
			return ;
	}
	str="";
	for(h=1;h<=n;h++)
	{
		if(pos[h])
			str+='1';
		else
			str+='0';
	}
	myset.insert(str);
}

int main(void)
{
	int c,m;
	set<string>::iterator iter;

	while(scanf("%d",&n)!=EOF)
	{
		myset.clear();
		scanf("%d",&c);
		r=t=0;

		while(1)
		{
			scanf("%d",&m);
			if(m==-1)
				break;
			ON[r++]=m;
		}

		while(1)
		{
			scanf("%d",&m);
			if(m==-1)
				break;
			OFF[t++]=m;
		}

		for(i=0;i<=1;i++)    //枚举状态
		{
			for(j=0;j<=1;j++)
			{
				for(k=0;k<=1;k++)
				{
					for(p=0;p<=1;p++)
					{
						if(i+j+k+p>c)
							break;
						if ((i+j+k+p)%2!=c%2)
							continue;
						solve();
					}
				}
			}
		}
		if(myset.empty())
			printf("IMPOSSIBLE\n");
		else
		{
			for(iter=myset.begin();iter!=myset.end();iter++)
				cout<<*iter<<endl;
		}
	}
	return 0;
}


分享到:
评论

相关推荐

    ACM STL的应用

    8. 实际编程技巧和解题思路:虽然ACM竞赛的题目千变万化,但熟悉STL的使用和各种编程技巧可以更快地定位问题和解决问题。掌握STL还能够帮助参赛者在面对复杂问题时,通过分析问题特征快速选择合适的容器和算法,从而...

    acm ————stl

    它不仅能帮助程序员快速实现各种算法和数据结构,还能确保程序执行效率与内存使用的优化。 #### 二、STL简介 STL由三大部分组成:算法、容器和迭代器。这三者紧密联系,共同构建了一个强大且灵活的工具集。 1. **...

    acm程序设计曾宗根(主要看第二章,用STL解题会很方便)

    对于ACM竞赛而言,熟练掌握STL可以使选手更专注于问题本身,而非底层实现细节,从而提高解题速度和正确率。 ### 第二章重点:C++STL泛型编程 - **向量容器(vector)**:`vector`是一种动态数组,能够根据需要自动...

    南阳理工oj stl练习ac代码

    ACM(International Collegiate Programming Contest)是全球知名的大学生程序设计竞赛,其中STL的熟练运用是提高解题效率的关键。南阳理工的OJ平台可能包含ACM风格的题目,比如动态规划、图论、搜索等问题,通过AC...

    acm模版(包含浙大,吉林,和STL模版)

    在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC)中,拥有一个高效的编程模板是非常重要的,因为它能帮助参赛者快速解决复杂问题。本压缩包提供了三个著名的模版,分别是...

    C++语言 STL学习笔记.pdf

    此外,在PAT考试中,对于STL容器的操作通常要求对时间复杂度有所了解,这对于解题效率至关重要。 通过本次学习笔记,我们可以系统地了解C++ STL中常用容器的定义、操作方法以及它们的常见用途。掌握这些知识对于...

    算法题常用STL_STL_

    - **list**:双向链表,支持快速的插入和删除,但随机访问效率较低。 - **set**:红黑树实现的集合,元素唯一且有序。 - **multiset**:与set类似,但允许元素重复。 - **map**:红黑树实现的键值对集合,键唯一...

    NOIP2007.rar_STL

    掌握这些算法并结合STL,能有效提升解题效率和代码质量。 通过阅读《NOIP2007.pdf》,参赛者不仅可以学习STL的基础用法,还能了解到如何在实际竞赛中巧妙运用,提高编程解决问题的能力。对于准备参加信息学竞赛的...

    C++ STL泛化演技比赛编程

    在"第6阶段实战-基于STL泛化编程的演讲比赛资料"中,可能包含了具体的编程题目、样例代码、解题思路和参考实现,这些资料可以帮助参赛者理解和运用STL进行泛化编程。通过深入学习和实践,开发者可以熟练掌握STL,...

    POJ3253-POJ3253-Fence Repair【STL优先队列】

    描述“北大POJ3253-POJ3253-Fence Repair【STL优先队列】解题报告+AC代码”表明这是一篇关于如何解答此题目的报告,其中包含了通过AC(Accepted)状态的代码,即代码已经成功通过了所有测试用例。解题报告通常会涵盖...

    最新微信在线答题小程序源码独立版自带题库,支持答题卡和复活卡等多个特色功能.txt

    ### 微信在线答题小程序源码解析与特色功能详解 ...根据描述中的信息,该微信在线答题小程序源码可以通过百度网盘进行下载,下载地址为:[https://pan.baidu.com/share/init?surl=StL5YPhwZmVna_q3xFtRyA]...

    北大poj解题报告

    1. **基础算法讲解**:解题报告中可能会包含对基础算法的解析,如排序算法(快速排序、归并排序、冒泡排序等)、查找算法(二分查找、哈希查找等)以及图论和动态规划等。这些算法是解决POJ中多数问题的基础,通过...

    北大acm经典题目解题报告

    2. **效率优化**:使用STL库、避免不必要的运算、减少内存分配等。 3. **调试技巧**:学会使用调试工具,如GDB或IDE内置的调试功能。 五、团队协作与竞赛策略 1. **分工合作**:在团队中,成员可以分工负责不同类型...

    ACM比赛经验与常见问题对应的解题技巧总结

    - **STL标准模板库**:熟练掌握STL中的容器(如vector、map等)、算法(如sort、binary_search等)以及函数对象等,能够在编写代码时节省大量时间。 2. **数据结构的全面掌握**: - **基本数据结构**:数组、链表...

    我的noip解题报告

    3. **编程语言**:NOIP主要使用C++作为比赛语言,因此报告可能会涵盖C++的基础语法、STL库的使用,以及如何高效利用模板和函数来优化代码。 4. **问题分析**:解题报告可能会深入讨论如何理解和解析题目,如何将...

    北大ACM解题源码200题

    此外,你还可以从代码中学习到如何优化时间复杂度和空间复杂度,以及如何利用STL(Standard Template Library)等库函数提高代码效率。在ACM竞赛中,时间和空间的优化往往直接影响到能否在规定时间内完成解题。 ...

    数据结构解题报告完美版

    这份"数据结构解题报告完美版"显然是一个精心整理的资源,包含了各种数据结构相关的编程题解和源码,特别适合于ACM竞赛选手和算法设计者深入理解和实践。 1. **表达式求值**:这是典型的栈应用问题。在计算机科学中...

    cpp-LeetCode的解题代码和中文讲解

    5. **STL库**:标准模板库(STL)提供了大量现成的数据结构和算法,如容器(vector、list、set等)、算法(sort、find等)和迭代器,熟练运用STL可以简化代码并提高代码质量。 6. **异常处理**:在编写C++代码时,...

    poj解题报告(一百多道题)

    例如,动态规划中的“Fibonacci数列”和“背包问题”,贪心算法中的“活动安排问题”和“最小生成树”,回溯法中的“八皇后问题”和“N皇后问题”,以及分治法中的“快速排序”和“归并排序”。这些基础算法是解决...

    2009ACM多校联合暑期集训(3)解题报告 感谢各校的努力

    这篇解题报告主要涵盖了ACM竞赛中的多个算法和数据结构问题,涉及到了动态规划、数论、树状数组、线段树、高精度计算、矩阵快速幂等多种算法知识。下面将详细阐述这些知识点: A题改编自NCPC2008,强调了STL...

Global site tag (gtag.js) - Google Analytics