【5.5考试】

  三道题,几乎爆零,状态很不好,考到一半直接写数学作业去了。。

1.

时间限制:1s  空间限制:1M

Description

给出2n个正整数,有且只有两个数出现奇数次,从小到大输出这两个数。

Input

第一行给出一个n,第二行有2n个数。

Output

从小到大输出答案。

Simple Input 1 Simple Output 1
5 1 6
1 2 3 4 5 2 3 4 5 6  
Simple Input 2 Simple Output 2
2 1 2
1 1 1 2

Hint

n<=100000   所有数字均不超过int且均为正整数

  看起来就很难的样子。只有两个数出现了奇数次,自然想到xor,所有数xor,最后的xor值就是a^b的值。然后怎么判断a,b究竟是哪两个数?

  1010110  对于前面这个数(记为sum),假如是两个数^而成,那么sum某位置是1(记此位置为pos),a,b中必有某一个数这一位为1,另一个数此位为0。

  用sum去^所有pos位为1的数,得到的就是a,b其中一个数,另一个数用 sum^已得的数就好了。

  还有一点,此题数据范围太大而空间太小(后来数据又加强了),不可能存下所有给出的数。所以必须预处理出某一位为1时所有此位为1的数异或出的值。

CODE:

 1 #include<cstdio>
 2 using namespace std;
 3 int bit[32],sum,n;
 4 int main(){
 5     freopen("one.in","r",stdin);freopen("one.out","w",stdout);
 6     scanf("%d",&n);n*=2;
 7     int x,a,b;
 8     for(int i=1;i<=n;i++){
 9         scanf("%d",&x);sum^=x;
10         for(int j=0;j<32;j++)
11         if((x>>j)&1)bit[j]^=x;
12     }
13     for(int i=0;i<32;i++){
14         if(sum>>i&1){
15             a=bit[i];
16             b=sum^bit[i];
17         }
18     }
19     if(a>b){int t=a;a=b;b=t;}
20     printf("%d %d",a,b);
21     return 0;
22 }

  2

时间:1s 空间:256M

Simple Input 1 Simple Output 1
5 1 1 0 1
  0
Simple Input 2 Simple Output 2
10 19260817 7 3 2
  1 3 5 7 9

 

Hint    n<=1000000     此题有多种方案,任意输出一种即可

  通过样例可以看出,后面的商品价格有点高。。

  这么思考:可以购买连续的一段区间来达到目的。

  那么只需要记录对n取模后的前缀和,如果某商品(标号记为to)的前缀和等于在它之前某商品(记为to)的前缀和,只需要购买from和to之间的商品就行。

  这样购买一定有解。原因:算上0(一个都不买),共有n+1个前缀和,那么一定有2个前缀和相同,所以一定有解。

CODE:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #define ll long long
 7 #define inf 2147483647
 8 #define N 10000005
 9 using namespace std;
10 int sum[N],vis[N],A,B,n,from,to;
11 ll lt;
12 int main(){
13     freopen("rich.in","r",stdin);freopen("rich.out","w",stdout);
14     scanf("%d%d%d%I64d",&n,&A,&B,&lt);
15     if(lt==0){printf("1\n0");return 0;}
16     for(int i=0;i<=n;i++)vis[i]=-1;
17     sum[1]=lt%n;sum[0]=0;
18     vis[sum[1]]=1;vis[0]=0;
19     for(int i=2;i<=n;i++){
20         lt=(1ll*A*lt+B)%n;
21         sum[i]=(sum[i-1]+lt)%n;
22         if(vis[sum[i]]>=0){
23             from=vis[sum[i]]+1;
24             to=i;break;
25         }
26         else vis[sum[i]]=i;
27     }
28     printf("%d\n",to-from+1);
29     for(int i=from-1;i<=to-1;i++)printf("%d ",i);
30     return 0;
31 }

3

时间:1s 空间:256M

Description

给出一个的地图,然而只有一些地方有Wi-Fi,dp66为了看直播,只走有Wi-Fi的地方。

现在Ta想从左上角到右下角,问最少要移动多少Wi-Fi覆盖区域,使得Ta可以到终点。

Input

第一行有两个数,接下来是一个的地图,‘.‘表示空地,‘#‘表示有Wi-Fi覆盖。

Output

输出最少移动区域数,若无法这输出-1。

Simple Input 1

4 7
#...###
#...#.#
##..#.#
.#....#

Simple Output 1

3

Simple Input 2

4 5
.....
.###.
####.
.....

Simple Output 2

-1

Hint n<=m<=50

  就是一个bfs,移动的wifi的个数=路径上走过的‘ . ‘的个数。  用最短路的思想优化,否则TLE。  优化:如果此前通过某种途径到达此点的所走过的‘ . ‘的个数比这条路径所走的‘ . ‘的个数少,那么此条路径不再向后拓展。道理很显然。CODE:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cmath>
 7 #define ll long long
 8 #define inf 2147483647
 9 #define N 2505
10 using namespace std;
11 int n,m,cnt,dp[55][55][N];
12 int dx[]= {0,0,1,-1};
13 int dy[]= {1,-1,0,0};
14
15 char mp[55][55];
16 struct node {
17     int x,y,pit,wif;
18     bool operator <(const node &a)const {
19         return pit>a.pit;
20     }
21 };
22 priority_queue<node>q;
23
24
25 void solve()
26 {
27     node st;
28     st.x=st.y=1;
29     st.pit=(mp[1][1]==‘.‘);
30     st.wif=(mp[1][1]==‘#‘);
31     q.push(st);
32     while(!q.empty()) {
33         node u=q.top();
34         q.pop();
35         int x=u.x,y=u.y,wif=u.wif,pit=u.pit;
36         if(x==n&&y==m) {
37             printf("%d",pit);
38             break;
39         }
40         node v;
41         for(int i=0; i<4; i++) {
42             v.x=x+dx[i];
43             v.y=y+dy[i];
44             if(v.x>n||v.x<1||v.y>m||v.y<1)continue;
45             v.wif=u.wif+(mp[v.x][v.y]==‘#‘);
46             v.pit=pit+(mp[v.x][v.y]==‘.‘);
47             if(v.pit>=dp[v.x][v.y][v.pit])continue;//剪枝
48             dp[v.x][v.y][v.pit]=v.pit;
49             q.push(v);
50         }
51     }
52 }
53
54 int main()
55 {
56     freopen("way.in","r",stdin);
57     freopen("way.out","w",stdout);
58     scanf("%d%d",&n,&m);
59     memset(dp,0x3f,sizeof(dp));
60     for(int i=1; i<=n; i++) {
61         scanf("%s",mp[i]+1);
62         for(int j=1; j<=m; j++)
63             if(mp[i][j]==‘#‘)cnt++;
64     }
65     if(cnt<n+m-1)printf("-1");
66     else solve();
67     return 0;
68 }

				
时间: 2024-10-18 01:12:26

【5.5考试】的相关文章

高等代数期末考试

高等代数的最后一站,有惊无险. 高等代数期末考试试题

在线考试系统(Online Exam System)--ASP.NET

用户设计 -|学生 -|老师 -|管理员 学生结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|选课中心 -|显示所有老师所开课的信息可进行选课 -|显示自己已选课程 -|在线考试 -|对已选老师开设的课程选择进行考试 -|成绩查询 -|查看自己考试成绩   老师结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|课程管理 -|显示学校开设的课程(老师可选择添加课程) -|显示老师开设的课程 -|考试管理 -|显示老师自己开设的课程 -|对课程添加试题(选择.填

Java编程练习之输出考试成绩的前三名

在慕课网学习的时候遇到了这样一个Java编程练习题,正好对所学习的Java基础知识检验一下: 请根据所学知识,编写一个Java程序,实现输出考试成绩的前三名 要求: 1考试成绩已保存在数组scores中,数组元素依次为89 , -23 , 64 , 91 , 119 , 52 , 73 2要求通过自定义方法来实现成绩排名并输出操作,将成绩数组作为参数传入 3要求判断成绩的有效性( 0-100 ),如果成绩无效,则忽略此成绩 我自己分析了一下这个程序的过程: (1)首先是定义一个包含整型数组参数的

高级工程考试通过总结

2015年12月15日公布的高级工程师评审公示,我终于通过了,结果在意料之中,回过头来对整个过程进行总结,希望对考试的朋友有所帮助: 1.提前准备 (1)英语及计算机资格考试 高级工程师的考试有很多需要提前准备的,比如英语资格考试,计算机资格考试等,这些都应该在准备考试高工前搞定,这是必须条件. 计算机资格:http://www.bjrbj.gov.cn/bjpta/test_447/ksjs/jsj/ 英语资格考试:http://www.bjrbj.gov.cn/bjpta/test_447/

浙江大学软件学院三维动画与交互技术考试概念整理

第一讲 1.    增强现实技术AR: --融合了三维动画.立体视觉和图像处理: --建模.渲染.位置标定.图像融合: 2.    OpenGL是一种用于创建实时3D图像的编程接口. 3.    三维这个术语表示一个正在描述或显示的物体具有三维维度:宽度.高度.深度: --计算机3D图形实质上也是平面的: --在计算机屏幕上显示的二维图像,提供深度(或第三维)的错觉: 2D+透视 = 3D 透视使人产生深度的错觉. 4.    真正的3D是通过人的两只眼睛观察同一个物体,在视网膜上生成具有视差的

V5天下-安德揭密CCIEv5认证考试 就业和前途

在笔者看来,RSCCIEv5,这都不是事儿!您看Yeslab(上海)学员--来自思科的妹子一举拿下CCIEv5.0认证!!又一位double 女IE诞生 那么什么是事儿? 如何学习是事儿!这是我们提到的第一件事 笔者从最初的沁园公寓701室(Yeslab最原始的老巢),到沁园公寓907室(Yeslab的第一步扩张),之后搬到苏州长远天地1005室,又扩展到长远天地601室(Yeslab安全和DC的基地),再之后到,安德作为小弟和几位同僚奔赴上海这个国际大都市,我们的小圈子从华鼎大厦16D开始,而

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

分享CISSP CBT考试经验

各位前辈大家好:小弟在今年四月初通过了CISSP CBT考试,在这想跟大家分享一下准备心得与考试经验,让更多想通过考试的伙伴能对考试有更多的认识.我在2009年的10-11月份週二与週四晚间到参加汇哲开的CISSP课程,有老师系统性的介绍,让我入门的速度更快,不然有十个CBK,在日常工作是无法完全Cover的,补一个题外话,上完课没多久,我们公司不幸发生失火,此时BCP的训练就派上用场了,刚好可以验证所学与协助公司的MIS快速的回复系统资料,这也是让人意外的实务经验^ ^强烈建议刚开始准备的伙伴

全国计算机等级考试二级C语言程序设计考试大纲(2013年版)

转自:http://www.freencre.com/c2_artde_28.html 基本要求 1. 熟悉Visual C++6. 0集成开发环境. 2. 掌握结构化程序设计的方法,具有良好的程序设计风格. 3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序. 4. 在Visual C++6. 0集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力. 考试内容 一.C语言程序的结构 1. 程序的构成,main函数和其他函数. 2. 头文件,数据说明,函数的开始和结束标志以

二级MSOffice高级应用考试大纲(2013年版)

全国计算机等级考试二级MSOffice高级应用考试大纲(2013年版) 转自:  http://www.freencre.com/c2_artde_56.html  基本要求 1. 掌握计算机基础知识及计算机系统组成. 2. 了解信息安全的基本知识,掌握计算机病毒及防治的基本概念. 3. 掌握多媒体技术基本概念和基本应用.     4. 了解计算机网络的基本概念和基本原理,掌握因特网网络服务和应用.    5. 正确采集信息并能在文字处理软件Word.电子表格软件Excel.演示文稿制作软件Po