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;
}
分享到:
相关推荐
8. 实际编程技巧和解题思路:虽然ACM竞赛的题目千变万化,但熟悉STL的使用和各种编程技巧可以更快地定位问题和解决问题。掌握STL还能够帮助参赛者在面对复杂问题时,通过分析问题特征快速选择合适的容器和算法,从而...
它不仅能帮助程序员快速实现各种算法和数据结构,还能确保程序执行效率与内存使用的优化。 #### 二、STL简介 STL由三大部分组成:算法、容器和迭代器。这三者紧密联系,共同构建了一个强大且灵活的工具集。 1. **...
对于ACM竞赛而言,熟练掌握STL可以使选手更专注于问题本身,而非底层实现细节,从而提高解题速度和正确率。 ### 第二章重点:C++STL泛型编程 - **向量容器(vector)**:`vector`是一种动态数组,能够根据需要自动...
ACM(International Collegiate Programming Contest)是全球知名的大学生程序设计竞赛,其中STL的熟练运用是提高解题效率的关键。南阳理工的OJ平台可能包含ACM风格的题目,比如动态规划、图论、搜索等问题,通过AC...
在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC)中,拥有一个高效的编程模板是非常重要的,因为它能帮助参赛者快速解决复杂问题。本压缩包提供了三个著名的模版,分别是...
此外,在PAT考试中,对于STL容器的操作通常要求对时间复杂度有所了解,这对于解题效率至关重要。 通过本次学习笔记,我们可以系统地了解C++ STL中常用容器的定义、操作方法以及它们的常见用途。掌握这些知识对于...
- **list**:双向链表,支持快速的插入和删除,但随机访问效率较低。 - **set**:红黑树实现的集合,元素唯一且有序。 - **multiset**:与set类似,但允许元素重复。 - **map**:红黑树实现的键值对集合,键唯一...
掌握这些算法并结合STL,能有效提升解题效率和代码质量。 通过阅读《NOIP2007.pdf》,参赛者不仅可以学习STL的基础用法,还能了解到如何在实际竞赛中巧妙运用,提高编程解决问题的能力。对于准备参加信息学竞赛的...
在"第6阶段实战-基于STL泛化编程的演讲比赛资料"中,可能包含了具体的编程题目、样例代码、解题思路和参考实现,这些资料可以帮助参赛者理解和运用STL进行泛化编程。通过深入学习和实践,开发者可以熟练掌握STL,...
描述“北大POJ3253-POJ3253-Fence Repair【STL优先队列】解题报告+AC代码”表明这是一篇关于如何解答此题目的报告,其中包含了通过AC(Accepted)状态的代码,即代码已经成功通过了所有测试用例。解题报告通常会涵盖...
### 微信在线答题小程序源码解析与特色功能详解 ...根据描述中的信息,该微信在线答题小程序源码可以通过百度网盘进行下载,下载地址为:[https://pan.baidu.com/share/init?surl=StL5YPhwZmVna_q3xFtRyA]...
1. **基础算法讲解**:解题报告中可能会包含对基础算法的解析,如排序算法(快速排序、归并排序、冒泡排序等)、查找算法(二分查找、哈希查找等)以及图论和动态规划等。这些算法是解决POJ中多数问题的基础,通过...
2. **效率优化**:使用STL库、避免不必要的运算、减少内存分配等。 3. **调试技巧**:学会使用调试工具,如GDB或IDE内置的调试功能。 五、团队协作与竞赛策略 1. **分工合作**:在团队中,成员可以分工负责不同类型...
- **STL标准模板库**:熟练掌握STL中的容器(如vector、map等)、算法(如sort、binary_search等)以及函数对象等,能够在编写代码时节省大量时间。 2. **数据结构的全面掌握**: - **基本数据结构**:数组、链表...
3. **编程语言**:NOIP主要使用C++作为比赛语言,因此报告可能会涵盖C++的基础语法、STL库的使用,以及如何高效利用模板和函数来优化代码。 4. **问题分析**:解题报告可能会深入讨论如何理解和解析题目,如何将...
此外,你还可以从代码中学习到如何优化时间复杂度和空间复杂度,以及如何利用STL(Standard Template Library)等库函数提高代码效率。在ACM竞赛中,时间和空间的优化往往直接影响到能否在规定时间内完成解题。 ...
这份"数据结构解题报告完美版"显然是一个精心整理的资源,包含了各种数据结构相关的编程题解和源码,特别适合于ACM竞赛选手和算法设计者深入理解和实践。 1. **表达式求值**:这是典型的栈应用问题。在计算机科学中...
5. **STL库**:标准模板库(STL)提供了大量现成的数据结构和算法,如容器(vector、list、set等)、算法(sort、find等)和迭代器,熟练运用STL可以简化代码并提高代码质量。 6. **异常处理**:在编写C++代码时,...
例如,动态规划中的“Fibonacci数列”和“背包问题”,贪心算法中的“活动安排问题”和“最小生成树”,回溯法中的“八皇后问题”和“N皇后问题”,以及分治法中的“快速排序”和“归并排序”。这些基础算法是解决...
这篇解题报告主要涵盖了ACM竞赛中的多个算法和数据结构问题,涉及到了动态规划、数论、树状数组、线段树、高精度计算、矩阵快速幂等多种算法知识。下面将详细阐述这些知识点: A题改编自NCPC2008,强调了STL...