当前位置: 首页 > 编程日记 > 正文

河南省第二届ACM程序设计大赛解题报告(置换群)

1.

 1 /*
 2 前两道题一直在纠结提议,特别是第二题,看了别人的代码才明白过来题意,由测试用例都没明白 
 3 */
 4 #include <iostream>
 5 #include <cstring>
 6 #include <queue>
 7 using namespace std;
 8 
 9 const int maxn = 55;
10 int ins[maxn];
11 bool vis[maxn] = {false};
12 int N,A,B;
13 
14 //假设边界在AB之间 
15 int solve()
16 {
17     /*
18     刚开始忘记了开标记数组,要保证每个节点只访问一次,否则会死循环 
19     */
20     int a = max(A,B);
21     int b = min(A,B);
22     queue <int > q;
23     int cnt = 0;
24     while(!q.empty())
25         q.pop();
26     q.push(A);
27     vis[A] = true;
28     bool flag = false;
29     while(!q.empty())
30     {
31         cnt++;
32         int head = q.front();
33         q.pop();
34         int left = head - ins[head];
35         int right = head + ins[head];
36         if(left>=b&&!vis[left])
37         {
38             if(left==B)
39             {
40                 flag = true;
41                 break; 
42             }
43             vis[left] = true;
44             q.push(left);
45         }
46         if(right<=a&&!vis[right])
47         {
48             if(right==B)
49             {
50                 flag = true;
51                 break; 
52             }
53             vis[right] = true;
54             q.push(right);
55         }
56     }
57     if(flag)
58         return cnt; 
59     else
60         return -1;     
61 }
62 
63 int main()
64 {
65     int i,j,k;
66     int M;
67     
68     cin>>M;
69     while(M--)
70     {
71         memset(vis,false,sizeof(vis));
72         memset(ins,0,sizeof(ins));
73         
74         cin>>N>>A>>B;
75         for(i=1; i<=N; i++)
76         {
77             cin>>ins[i];
78         }
79         int ans = solve();
80         cout<<ans<<endl;
81     }
82     return 0;
83     
84 }

2.刚开始用list写的,太恶心了,写不成,就换成直接的链表了

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int N,K;
 6 typedef struct Node 
 7 {
 8     int data;
 9     Node * next;
10 }Node;
11 
12 Node *head;
13 void init()
14 {
15     //头结点也要申请空间 
16     head = new Node;
17     head->data = 0;
18     head->next = NULL;
19     //头插法 
20     for(int i=1; i<=N; i++)
21     {
22         Node *p = new Node;
23         p->next = head->next;
24         head->next = p;
25         p->data = N-i+1;
26     }   
27 }
28 
29 int main()
30 {
31     int i,j,k;
32     cin>>N>>K;
33     int a,b,c;
34     init();
35     for(i=1; i<=K; i++)
36     {
37         cin>>a>>b>>c;
38         Node *p,*q,*r;
39         Node *temp1, *temp2, *temp3;
40         
41         int cnt = 0;
42         for(p=head; cnt<a-1; cnt++,p=p->next);
43         temp1 = p;
44         
45         cnt = 0;
46         for(p=head; cnt<b; cnt++,p=p->next);
47         temp2 = p;
48         
49         cnt = 0;
50         for(p=head; cnt<c; cnt++,p=p->next);
51         temp3 = p;
52         
53         Node *temp4 = temp2->next;
54         temp2->next = temp3->next;
55         temp3->next = temp1->next;
56         temp1->next = temp4;
57     }
58     Node *p;
59     int cnt = 0;
60     for(p=head->next,cnt=0; cnt<10; cnt++,p=p->next)
61     {
62         cout<<p->data<<endl;
63         
64     }
65     while(1);
66     return 0;
67 }

3.

4.参考华杰做出来的

 1 //置换群问题 
 2 /*
 3 求最小费用时求较小着:用分解后的每个循环里的最小值,或者全局最小值 
 4 */
 5 #include <iostream>
 6 #include <cstring>
 7 #include <cstdlib>
 8 #include <algorithm>
 9 using namespace std;
10 
11 const int maxn = 1010;
12 int N;
13 int g_min = 1010;//全局置换群最小值,题目上说最大高度是1000 ,每次的全局最小会改变,不能是const 
14 
15 int hash[maxn],a[maxn],b[maxn];
16 bool vis[maxn];
17 
18 int solve()
19 {
20     memset(vis,false,sizeof(vis)); 
21     int i,j,k;
22     //若分解后的循环里面只有一个元素,则该元素在原来的群里面必定是排好序的
23     int len = N;
24     int l_min = 1010;//局部最小值 
25     int ans = 0;
26     while(len>0)
27     {
28         int i = 0;
29         int length = 0;//循环的长度 
30         //vis数组标记的是输入的顺序,先找到第一个后,那么经过下面的操作后第一个循环就被全部标记过了 
31         while(vis[i])
32         {
33             i++;
34         }
35         int begin = i;
36         int sum = 0;//每次循环的所有元素和 
37         //找循环
38         /*
39         必须用 do while(至少执行一次),或者死循环里用break;不可while(i!=begin)这样的话 因为int begin = i则大循环一直执行 
40         */
41         do
42         {
43             length++;
44             vis[i] = true;//i是个下标值 ,放在i改变之前                
45             if(l_min>a[i])
46                 l_min = a[i]; 
47             sum += a[i];
48             //hash数组返回的只是一个下标值 
49             i = hash[b[i]];//返回的是起点对应的下标所对应元素的下标 ,必须放在sum之后 
50         }while(begin!=i);
51         
52         len -= length;//必须在continue之前 
53         if(length==1)//必须有 ,表示循环里只有一个元素,则不花费代价 
54             continue;
55                   
56         //ans1用的是循环内最小值,sum存的是循环内所有的元素和 ,局部最小元素用了 (length-1)次,其他的用了一次,因为在sum
57         //里已经加了一次局部最小,所以 length-2)*l_min;
58         int ans1 = sum + (length-2)*l_min;
59         //全局的先把局部的换出来最后还要在换回来 ,所以答案是两次全局 + 两次局部 + sum里除了局部之外的其他元素和 
60         int ans2 = sum + l_min + (length+1)*g_min;
61         
62         ans += ans1>ans2?ans2:ans1;//是累计,不是直接赋值 
63     }
64     return ans;    
65 }
66 
67 int main()
68 {
69     int i,j,k;
70     int T;
71     cin>>T;
72     while(T--)
73     {
74         cin>>N;
75         memset(hash,0,sizeof(hash));
76         memset(a,0,sizeof(a));
77         memset(b,0,sizeof(b));
78       
79         
80         for(i=0; i<N; i++)
81         {
82             cin>>a[i];
83             b[i] = a[i];//排好序的数组 
84             if(g_min>a[i])
85             {
86                 g_min = a[i];
87             }
88             hash[a[i]] = i;
89         }
90         sort(b,b+N);
91         int ans = solve();
92         cout<<ans<<endl; 
93     }
94     system("pause");
95     return 0;
96 }

转载于:https://www.cnblogs.com/hxsyl/archive/2013/04/25/3043678.html

相关文章:

【青少年编程】【四级】创意画图

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

《机器学习实践》程序清单2-2

将文本记录转换为NumPy的解析程序 def file2matrix(filename):print("读入文件" str(filename))#以下两行为打开文本文件并读取内容到数组&#xff0c;有没有发现这个操作好简单&#xff1f;&#xff01;fr open(filename)arrayOLines fr.readlines() #把文件中的…

vba保存文件为xlsx格式_Vba把Excel某个范围保存为XLS工作薄文件

Dim wn$, shp As Shape, arrApplication.ScreenUpdating FalseApplication.DisplayAlerts Falsewn [a1]arr Range("o3:o" & Range("o65536").End(xlUp).Row)Sheets("报表").CopyWith ActiveWorkbookWith .Sheets(1).Rows("1:2"…

通过正则表达式查找一个模式的所有实例

这个功能就是一般的文本查找功能&#xff0c;比较实用&#xff0c;记录下来&#xff0c;说不定以后可以用到 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head><meta charset"utf-8" /><title>string的ma…

【青少年编程】【四级】奇偶之和

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

ThinkPHP子类继承Controller类的注意事项

在实际的开发中&#xff0c;往往有很多子类都继承自同一个父类&#xff0c;然后该父类再继承自框架内置类的需求。 比如: class Init extends Controller{...} class son1 extends Init{...} class son2 extends Init{...} .... 若在Init类中&#xff0c;重写了构造函数&#x…

java右移位_java、、移位操作方法

<int leftShift 10;System.out.println("十进制:" leftShift ", 二进制:" Integer.toBinaryString(leftShift));int newLeftShift letfShift << 2;System.out.println("左移2位后十进制:" newLeftShift ", 左移2位后二进制…

系统集成性研究

视频监控平台不可以作为集成中心。无论其能够处理的数据类型&#xff0c;还是是其 互联互通需定制开发网关转载于:https://www.cnblogs.com/jcode/archive/2013/04/29/3050807.html

quartz在集群环境下的最终解决方案

在集群环境下&#xff0c;大家会碰到一直困扰的问题&#xff0c;即多个 APP 下如何用 quartz 协调处理自动化 JOB 。大家想象一下&#xff0c;现在有 A &#xff0c; B &#xff0c; C3 台机器同时作为集群服务器对外统一提供 SERVICE &#xff1a;A &#xff0c; B &#xff0…

【通知】2021-2022-1线性代数课程答疑安排

2021-2022-1线性代数课程答疑安排 本学期线性代数课程答疑安排如下&#xff1a; 答疑时间&#xff1a;每周二 13&#xff1a;00-14&#xff1a;30&#xff1b;答疑地点&#xff1a;教七楼202&#xff08;信息教研室&#xff09;&#xff1b; 答疑教师排班如下: 第五周&…

解压zip_go|用Go写一个zip解压脚本

用服务器自带的unzip命令解压zip包时&#xff0c;经常遇到编码问题&#xff0c;所以用Go写一个zip解压脚本来处理zip包代码如下&#xff1a;package mainimport ("archive/zip""bytes""flag""fmt""io""io/ioutil"…

springmvc常用注解标签详解

参考&#xff1a;https://www.cnblogs.com/leskang/p/5445698.html 1、Controller 在SpringMVC 中&#xff0c;控制器Controller 负责处理由DispatcherServlet 分发的请求&#xff0c;它把用户请求的数据经过业务处理层处理之后封装成一个Model &#xff0c;然后再把该Model 返…

python基础学习-5(包与模块)

包和模块&#xff1a; 模块导入&#xff0c;会将模块(xxx.py编译为xxx.pyc,以便于下次直接使用) Python搜索模块的路径&#xff1a;1) 程序的主目录2) PTYHONPATH目录&#xff08;如果已经进行了设置&#xff09;3) 标准连接库目录&#xff08;一般在/usr/local/lib/python2…

【青少年编程】【四级】数字之和

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

ios uiview 如何刷新_UIView的重绘及布局刷新

本文将简要讨论以下几个问题&#xff1a;1、UIView的drawRect方法的调用机制及注意点2、UIView的layoutSubviews、layoutIfNeeded、setNeedsLayout等方法的调用机制3、如何通过更新view的约束值来实现动画效果博客配图重绘机制 - drawRect方法定义Drawing and Updating the Vie…

Ueditor和CKeditor 两款编辑器的使用与配置

一丶ueditor 百度编辑器 1.官方文档&#xff0c;演示&#xff0c;下载地址&#xff1a;http://ueditor.baidu.com/website/index.html 2.百度编辑器的好&#xff1a;Editor是由百度web前端研发部开发所见即所得富文本web编辑器&#xff0c;具有轻量&#xff0c;可定制&#xff…

Datawhale组队学习周报(第032周)

希望开设的开源内容 目前Datawhale的开源内容分为两种&#xff1a;第一种是已经囊括在我们的学习路线图内的Datawhale精品课&#xff0c;第二种是暂未囊括在我们的学习路线图内的Datawhale打磨课。我们根据您的投票来确定精品课程的排期&#xff0c;打磨课程一旦完成&#xff…

常建的性能指标

1、响应时间响应时间指的是“系统响应时间”&#xff0c;定义为应用系统从发出请求开始到客户端接收到响应所消耗的时间。把它作为用户视角的软件性能的主要体现。它包括网络上的传输时间&#xff0c;web服务器上处理时间&#xff0c;APP服务器上处理时间&#xff0c;DB服务器上…

东野圭吾最值得看的书排行榜_东野圭吾最值得看的7本作品,我进了坑就再也没出来...

自从读了东野圭吾的《解忧杂货店》,我便一发不可收拾,成了这位日本推理大佬的脑残粉。 有的人说不清他哪里好,但就是想戒也戒不掉!读了东野圭吾几乎所有作品后,我盘点了「东野圭吾作品必读top 7」,拿去不谢—— 07《圣女的救济》 一场真正的“完美谋杀”! 男子在家中死亡…

【青少年编程】【四级】用逗号分隔列表

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

Console-算法-一个偶数总能表示为两个素数之和

ylbtech-Arithmetic:Console-算法-一个偶数总能表示为两个素数之和1.A&#xff0c;Demo(案例)【程序84】题目&#xff1a;一个偶数总能表示为两个素数之和。1.程序分析&#xff1a; 1.B&#xff0c;Solution(解决方案)【不太理解】using System;namespace ConsoleApplication1 …

day16-筛选器以及Tab菜单示例

一、前言 之前我们学习dom写Tab菜单示例&#xff0c;今天我们来学习一下常用的筛选器和Tab菜单示例。 二、操作的html <head><meta charset"UTF-8"><title>Title</title><style>.header{background-color: black;color: white;cursor:…

nginx和mysql链接_nginx转发mysql连接

场景&#xff1a;访问UAT环境&#xff0c;只能使用客户电脑访问&#xff0c;太难用了&#xff0c;于是就需要在自己电脑上跑代码&#xff0c;通过客户电脑中转来访问uat环境的数据库。选用nginx进行转发。配置如下&#xff1a;stream {upstream cloudsocket {hash $remote_addr…

两个有序单链表的并交差运算

/*实验2.6&#xff1a;求集合&#xff08;有序单链表表示&#xff09;的并、交和差运算*/ #include<iostream> #include<malloc.h> using namespace std; typedef char ElemType; typedef struct LNode {ElemType data;struct LNode *next; }LinkList; void Displa…

【青少年编程】【蓝桥杯】排队购票

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

Linux (CentOS 7 )下搭建局域网SVN服务器+SVN权限配置

准备 公司内部需要配置局域网SVN&#xff0c;需要在在内部虚拟机服务器搭建&#xff0c;搭建过程做个记录&#xff0c;供参考。注&#xff1a;如果条件允许&#xff0c;尽量在windows下搭建svn服务器&#xff0c;很省事&#xff0c;尤其是权限配置非常方便又易懂&#xff0c;效…

mysql事件探查器_【干货】Mysql的事件探查器-之Mysql-Proxy代理实战一(安装部署与实战sql拦截与性能监控)...

1:资料参考https://blog.csdn.net/coldljy/article/details/3168906https://www.cnblogs.com/jwentest/p/8552075.htmlhttps://www.cnblogs.com/ExMan/p/10396298.html一&#xff1a;原理Mysql-Proxy是一个处于你的client端和Mysql Server端之间的一个简单程序&#xff0c;它可…

【青少年编程】【蓝桥杯】绘制莲花图形

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

问题总结两天来两场实习面试(中科创达、华为)

查了好多资料&#xff0c;发现还是不全&#xff0c;干脆自己整理吧&#xff0c;至少证保在我的做法正确的&#xff0c;以免误导读者&#xff0c;也是给自己做个记录吧&#xff01; 昨天下午去的中科创达口试 今天下午刚刚结束为华的练习生口试&#xff0c;月五二号去上机试笔&a…

不想被问年终奖?2018年春节自救攻略来了!

转眼间,春节即将来临&#xff01;当然按捺不住那颗归家的心~但是想到回家&#xff0c;就要接受来自七大姑八大姨的亲切问候&#xff0c;美好的假期变得不怎么美好了&#xff0c;瞬间忧伤起来~对象难找、年终奖少&#xff0c;当被七姑八姨问起时&#xff0c;内心总会产生抵触情绪…