CDOJ 第七届ACM趣味程序设计竞赛第三场(正式赛) 题解
宝贵资源
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1265
题意
平面上给n个点(n<=1000),要求找一个面积最小的正方形,将所有的点都囊括进去。
要求正方形的边必须平行于坐标轴。
题解:
对于这道题,我们可以首先找一个满足题意的,并且面积是最小的矩形。
假设矩形的长为L,宽为W,那么很显然:
L = (MaxX - MinX)
W = (MaxY - MinY)
MaxX,MaxY 指题目中输入的最大横、纵坐标的值,MinX,MinY 指题目中输入的最小横,纵坐标的值。
因为我们需要得到正方形,那么正方形的边长
L 取 max(L,W)即可。
这道题就结束了~
代码如下:
#include<iostream>
#include<stdio.h>
using namespace std;
unsigned long long x1=99999999999LL,x2=0,y1=99999999999LL,y2=0;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
unsigned long long X ,Y;
cin>>X>>Y;
x1 = min(x1,X);
x2 = max(x2,X);
y1 = min(y1,Y);
y2 = max(y2,Y);
}
unsigned long long l = max(x2-x1,y2-y1);
cout<<l*l<<endl;
}
The Desire of Asuna
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1263
题意
给你n条链,每条链的长度为a[i]
每次操作你可以选择一条链,使得这条链的长度减1,然后使得任意两条链连接在一起,连接之后的长度要加1。
询问最少操作次数。
题解:
贪心。
我们选择长度减小的链,一定是可选的,并且长度最小的链。
我们选择合并的链,一定是当前长度最大的两条链。
为什么?
假设所有的链的长度都是无限长,这道题的答案毫无疑问就是 n-1 。
但是长度并不是无限长的,所以我们可以通过 使得链长度-1 的这个操作,去除一些链,使得答案比 n-1 小
很容易可以看出,我们之前的贪心策略,可以使得尽量多的链在 长度-1 这个阶段就被消去了。
所以这道题就结束了。
代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[2005];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int l = 1,r = n;
int ans = 0;
while(l<r)
{
a[l]--;
r--;
ans++;
a[r]+=a[r+1]+1;//这句话可有可无
if(a[l]==0)l++;
}
printf("%d\n",ans);
}
人民币的构造
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1264
题意
给你n,要求你找到最少的数,并且这些数最多使用一次。
使得通过加减可以构成1-n中的所有数。
问你最少多少个数。
题解:
数学题
假设 现在 [1,K] 范围内的数,你都能得到
那么你加入一个数之后,能够构造出的最大的数是多少?
答案是3K+1
为什么?
假设你加入的数是 A , 那么至少 K+1到A-1 范围内数,你必须通过 A - X 来得到。
[A-K,A-1],这玩意是造出来的,为了使得A最大,考虑A-K=K+1,因为要连续,所以A= 2K+1
所以 最多能构造出 A + K = 3K + 1
所以就可以得到结论,1张钱最多构造1元,2张钱构造4元,3张13元,4张40元......
所以这道题就结束了。
代码
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int ans = 1;
int l = 1;
int sum = 1;
while(sum<n)
{
l = sum*2+1;
sum += l;
ans++;
}
printf("%d\n",ans);
}
奇怪的四元数
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1266
题意
四元数是由实数加上三个元素i,j,k组成,而且它们有如下的关系:
i2=j2=k^2=−1
i×j=−j×i=k
j×k=−k×j=i
k×i=−i×k=j
显然,四元数不满足交换律。现在给你一个长度为N的四元数乘法表达式(只包含i,j,k),为了使它的结果等于1,你可以选取表达式中的任意两个数进行交换,但交换次数不能大于M次。
若可能使结果为1,输出交换的最少步数。
否则,输出−1。
题解:
数学题
这道题的结论如下:
1.如果这个串最后答案是i,j,k的话,直接输出-1
2.如果这个串最后答案是1的话,输出0
3.如果这个串最后答案是-1的话,非特殊情况输出1,否则输出-1
特殊情况如下:
1.m=0
2.这个串只含有i,j,k.(交换和不交换都一样.
关于结论的证明
第一个结论证明:
显然成立,换位只改变符号。
第二个结论也显然成立。
第三个结论:
首先意识到,虽然不满足交换律,但是满足结合律。
即 ijk = i(jk)
那么我们只要随便交换两个相邻的不同的字符就好,就可以使得答案乘上-1了
代码
#include<iostream>
#include<stdio.h>
using namespace std;
char s[1005];
int flag[4][4]={
{0,1,2,3},
{1,0,3,2},
{2,3,0,1},
{3,2,1,0}
};
int idx(char c)
{
if(c=='i')return 1;
if(c=='j')return 2;
if(c=='k')return 3;
return 0;
}
int main()
{
int n,m;
scanf("%d%d%s",&n,&m,s);
int sig=1;
int now = 0;
int Test = 0;
for(int i=0;i<n;i++)
{
if(i>0&&s[i]!=s[i-1])
Test=1;
int k = idx(s[i]);
if(now == k)
{
sig = sig * (-1);
now = 0;
}
else
{
if(now==1&&k==3)
sig = sig * (-1);
if(now==2&&k==1)
sig = sig * (-1);
if(now==3&&k==2)
sig = sig * (-1);
now = flag[now][k];
}
}
if(now)return puts("-1");
if(sig==-1&&Test==0)return puts("-1");
if(sig==1)return puts("0");
else if(sig==-1&&m>0)return puts("1");
return puts("-1");
}
Memory
题目连接:
http://acm.uestc.edu.cn/#/problem/show/1262
题意
有n瓶药,其中有两瓶药的药丸比其他的都轻0.1g
你需要构造出一种方案,使得无论哪两种药瓶里的药有问题都可以通过一次测量得到答案。
要求方案的字典序最小。
题解:
暴力
1.首先 fib 是错的。
2.如果n=2,注意输出1,1
3.数据范围只有52.
假设你现在已经构造出了数据为n的方案了,那么我们现在加一个数进去,这个数应该是多少呢?
直接暴力。
从小到大暴力,看哪个数与之前n个数的和都没有出现过。
然后这道题就结束了。
代码
#include<iostream>
#include<stdio.h>
using namespace std;
int a[100000];
int ans[60];
int check(int x,int tot)
{
for(int i=1;i<tot;i++)
if(a[ans[i]+x]==1)
return 0;
return 1;
}
int main()
{
int n;
scanf("%d",&n);
if(n==2)return puts("1 1");
a[3]=1;
ans[1]=1,ans[2]=2;
for(int i=3;i<=n;i++)
{
for(int j=1;;j++)
{
if(check(j,i))
{
ans[i]=j;
break;
}
}
for(int j=1;j<i;j++)
a[ans[i]+ans[j]]=1;
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}
CDOJ 第七届ACM趣味程序设计竞赛第三场(正式赛) 题解的更多相关文章
- UESTC-第五届ACM趣味程序设计竞赛第四场(正式赛)--不完全解题报告
比赛链接: http://acm.uestc.edu.cn/contest.php?cid=230 A.Police And The Thief ---UESTC 1913 简单博弈,先假设在警察先走 ...
- 第七届ACM趣味程序设计竞赛第四场(正式赛) 题解
Final Pan's prime numbers 题目连接: http://acm.uestc.edu.cn/#/problem/show/1272 题意 给你n,要求你在[4,n]范围内找到一个最 ...
- ZZUOJ-1195-OS Job Scheduling(郑州大学第七届ACM大学生程序设计竞赛E题)
1195: OS Job Scheduling Time Limit: 2 Sec Memory Limit: 128 MB Submit: 106 Solved: 35 [id=1195&quo ...
- 电子科技大学第八届ACM趣味程序设计竞赛第四场(正式赛)题解
A. Picking&Dancing 有一列n个石子,两人交替取石子,每次只能取连续的两个,取走后,剩下的石子仍然排成1列.问最后剩下的石子数量是奇数还是偶数. 读懂题意就没什么好说的. #i ...
- 电子科技大学第九届ACM趣味程序设计竞赛(热身赛)题解
比赛地址:http://acm.uestc.edu.cn/#/contest/show/191 A题 小羽涂色 题意: 在x轴的正半轴上,问你是否存在一段区间[L,R]其中包含r个奇数和g个偶数. 分 ...
- ACM学习历程—NPU1086 随机数 2015年陕西省程序设计竞赛网络预赛(正式赛)C题 (计数排序 || set容器)
Description 开学了,ACM队的边老板想在学校中请一些妹子一起做一项问卷调查,调查妹子们对ACM的了解情况,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100), ...
- ACM学习历程—NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推)
Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...
- NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))
Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...
- 山东省第七届ACM省赛------Memory Leak
Memory Leak Time Limit: 2000MS Memory limit: 131072K 题目描述 Memory Leak is a well-known kind of bug in ...
随机推荐
- VB6.0编程笔记——(1)篇外篇&目录
从计算机专业毕业到进入IT行业,说来也有些年头了.相比较而言算是幸运,也有很多的同学进入了其他行业,也有一些朋友又想进入这个行业.现在回想自己的一路历程,总结一下,也是一份记忆. 基于以上的原因,希望 ...
- android命名规范
Android 开发规范 (陈杨) (一)注意事项 1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了. 2. 缩进统一为4个空格,将Tab si ...
- 小数点输出精度控制问题 .xml
pre{ line-height:1; color:#9f1d66; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#5d57ff; ...
- switch……case不能匹配字符串的方法 .xml
pre{ line-height:1; color:#d1653c; background-color:#000000; font-size:16px;}.sysFunc{color:#566d68; ...
- java 代码如何生成 chm
由于要把一个框架的东西打成 chm, 今天在网上找了几篇文章 http://blog.sina.com.cn/s/blog_5d31611a0100gqwp.html 李顺利 首先第一步,从eclip ...
- 黑马程序员——OC的内存管理学习小结
内存管理在Objective-C中的重要性就像指针在C语言中的重要程序一样. 虽然作为一门高级语言,但OC却没有内存回收机制.这就需要开发者来对动态内存进行管理.OC中内存管理的范围是:任何继承了NS ...
- Python 读取文件下所有内容、获取文件名、截取字符、写回文件
# coding=gbk import os import os.path #读取目录下的所有文件,包括嵌套的文件夹 def GetFileList(dir, fileList): newDir ...
- BestCoder Round #88
传送门:BestCoder Round #88 分析: A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了: 代码: #include <cstdio> #include ...
- C#获取文件的绝对路径
要在c#中获取路径有好多方法,一般常用的有以下五种: //获取应用程序的当前工作目录. String path1 = System.IO.Directory.GetCurrentDirectory() ...
- 好用的shell命令行: fish的配置
fish的可视化配置命令: $ fish_config 其配置文件夹为 ~/.config/fish. 1.要设置环境变量,在配置文件夹里新建 config.fish 文件,它会作为fish 启动时的 ...