2015多校训练5题解与代码

首先呢,要废话一段。。这场是见过的所有多校中最最亲民的。因为英文题面都很短。但是是最考验智商的一次(除去那个化学第一电离能)。。。

赛后补题在题解和各大巨巨的帮助下能够补到7题也是醉了。说明题就是考模型建立,没有考到多深的知识点。

戳我见官方题解

1002:HDOJ 5344

第一眼看上去就是亦或啊,又是数学啊,又是不能暴力的。the xor of all (Ai+Aj)(1≤i,j≤n)这是关键句。根据题意把需要的写出来,发现所有i!=j的,都可以利用a^a=0消除,所有只剩下i==j的。最后答案就是(2*a1)^(2*a2)^(2*a3)^.....(2*an)

代码(不要开数组保存ai):

	while(t--){
		scanf("%I64d%I64d%I64d%I64d",&n,&m,&z,&l);
		a=ans=0;
		while(n--){
			ans=ans^(2*a);
			a=(a*m+z)%l;
		}
		printf("%I64d\n",ans);
	}

1005:HDOJ 5347

这题网上的评论一大堆,我只想说:如果出在现场赛,没有百度没有谷歌没有维基,有多少大学生还记得第一电离能是个什么鬼啊。。。。。

顺便让大学理科狗回忆回忆高三时光:第一电离能

重要的是里面那张图片说明了很多特征,归纳如下:

1.同周期的序号越大第一电离能越大

2.同一族的序号越小第一电离能越大

3.在图中明显的4个需要特判的,B,O,Al,S。。。

细节题用各种if语句就好了:

int a,b;
int Min,Max;
int num[]={8,18,32,16,26,36,50,34,44,68,52,76,84};

bool check(int x){
	for(int i=0;i<=12;i++)
		if (num[i]==x) return true;
	return false;
}

int main(){
	//input;
	while(scanf("%d%d",&a,&b)!=EOF){
		Min=min(a,b);
		Max=max(a,b);
		if (Max==5&&Min==4){
			if (a==4) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
		else if (Max==8&&Min==7){
			if (a==7) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
		else if (Max==13&&Min==12){
			if (a==12) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
		else if (Max==16&&Min==15){
			if (a==15) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
		else if (check(Max-Min)){
			if (a==Min) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
		else{
			if (b==Min) puts("FIRST BIGGER");
			else puts("SECOND BIGGER");
		}
	}
	return 0;
}

1007:HDOJ 5349

simple problem确实简单,看了题解没什么要说的。。。。。。

PS:还是得学习学习各种自创的和STL中的数据结构,根据题目意思来做

int main(){
	//input;
	while(scanf("%d",&n)!=EOF){
		len=0;
		maxnum=-1*INF;
		for(i=1;i<=n;i++){
			scanf("%d",&j);
			if (j==1){
				scanf("%d",&k);
				len++;
				maxnum=max(maxnum,k);
			}
			else if (j==2){
				if (len){
					len--;
					if (!len) maxnum=-1*INF;
				}
			}
			else if (j==3){
				if (len) printf("%d\n",maxnum);
				else printf("0\n");
			}
		}
	}
	return 0;
}

1008:HDOJ 5350

典型的智商题,如果直接告诉你是个huffman全场肯定不止几个强队AC的。。。。智商还是比水平更加重要,分辨难题和水题靠的是细节和智商。。。

这个题的题面把huffman隐藏的很深,不过呢,,,从取较小可以看出DP的思想。。。。结果。。。。。就证明了

利用STL的优先队列实现:

priority_queue<int,vector<int>,greater<int> > que;

int t,n,i,j,k;
__int64 ans;

int main(){
	//input;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		while(!que.empty()) que.pop();
		for(i=1;i<=n;i++){
			scanf("%d",&j);
			que.push(j);
		}
		ans=0;
		while(n>1){
			i=que.top();que.pop();
			j=que.top();que.pop();
			k=i+j;
			ans+=k;
			que.push(k);
			n--;
		}
		printf("%I64d\n",ans);
	}
	return 0;
}

1009数学题+大数:用Java更方便。。什么都不想,结论比赛的时候是需要有个强力数学队友来帮忙的

大数是需要风格需要模板的:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String args[]){
		BigInteger Mod=BigInteger.valueOf(258280327);
		BigInteger[] big;
		big=new BigInteger[2000];

		big[1]=BigInteger.valueOf(1);
		big[2]=BigInteger.valueOf(1);
		for(int i=3;i<=1000;i++) big[i]=big[i-1].add(big[i-2]);

		int t;
		BigInteger m;
		Scanner reader=new Scanner(System.in);

		t=reader.nextInt();
		for(int Case=1;Case<=t;Case++){
			m=reader.nextBigInteger();
			m=reader.nextBigInteger();
			int i,j;
			for(i=1;i<=1000;i++){
				j=big[i].compareTo(m.add(BigInteger.valueOf(1)));
				if (j>0) break;
			}
			System.out.println((m.subtract(big[i-2])).mod(Mod));
		}
		reader.close();
	}
}

剩下两题感谢我的女神罗茜巨巨

1006:HDOJ 5348

女神带你飞

1010:HDOJ 5352

女神带你飞

每次写完还是要废话的:

1.看题还是要仔细。说不定别人觉得麻烦,你看懂了里面的套路就知道是个水题

2.数学还是很重要的

3.Java大数很有用

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 19:09:46

2015多校训练5题解与代码的相关文章

HDU 5289 Assignment(2015多校训练)

题目链接:戳我 题目大意: 公司有 n 个员工,编号为1....n,每个员工有能力 a[i],现将这些员工分为若干组,每组的员工的编号必须相连,且满足每组员工任意两个人能力的差值小于 k,可以一个人一组 问能分成多少组. 样例解释: 2       //两组测试样例 4 2      // 分别代表n, k 3 1 2 4 // 代表每个员工的能力,故可分组为[1,1].[2,2].[3,3].[4,4] .[2,3], 其中为数组的下标,其他均不符合题意,因为相差的值 >= 2 10 5 //

2015多校训练第二场 hdu5305

把这题想复杂了,一直在考虑怎么快速的判断将选的边和已选的边无冲突,后来经人提醒发现这根本没必要,反正数据也不大开两个数组爆搜就OK了,搜索之前要先排除两种没必要搜的情况,这很容易想到,爆搜的时候注意几个小细节就可以了(代码代码注释中已标好) #include<cstdio> #include<cstring> #include<iostream> #include<vector> #include<utility> using namespace

2015 多校训练第3场 1011 【树形结构问题】

It’s an interesting experience to move from ICPC to work, end my college life and start a brand new journey in company.As is known to all, every stuff in a company has a title, everyone except the boss has a direct leader, and all the relationship fo

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称. 现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中 要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部分,也就是说,左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样. 因为我们已经记录下来以

HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&amp;#39;s problem(manacher+二分/枚举)

pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度. 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法.求出以第i个点为中心的回文串长度.记录到数组p中 要满足题目所要求的内容.须要使得两个相邻的回文串,共享中间的一部分,也就是说.左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也

2016暑假多校训练参赛感想

参赛感想 这是第一次参加暑假多校训练,应该也会是人生中最后一次,我真的很庆幸能参加这个训练,和全国几乎所有高校的ACMer一起在一个平台上做题!昨天为止多校已经完全结束,今天看到叉姐的训练感想(叉姐的感想链接),我觉得我也有必要写下自己的训练感想. 人的眼界总是狭窄的,当在自己的学校站在前几名的时候觉得自己还不错,应该会有不错的将来,但是当第一次参加国赛(2015 南阳站)的时候我便被别人实力所震撼,我突然觉得自己在别人的眼里简直就是小学生,菜到不行.别人在5个小时可以AK,而我连最水的题也要想

HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)

题目地址:HDU 4920 对这个题简直无语到极点...居然O(n^3)的复杂度能过....方法有三.. 1:进行输入优化和输出优化..(前提是你的输入优化不能太搓...) 2:利用缓存优化..详情请看该论文.大体就是将后两个for循环换过来,让坐标改变的频率降下来. 3:叉姐题解中说的正规方法..利用biset存储,进行预处理..(其实我还没看懂.. 我只写了个第二种...代码如下,共勉..神奇的小代码.. #include <iostream> #include <cstdio>

HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)

HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6621 题意: 给你n个数,有m次询问 每次问你在区间[l,r]内 第k小的|\(a_i-p\)|是多少 题解: 主席树+二分 每次二分答案 如果p+mid到p-mid的值的个数大于k个的话,mid值就是可行了,然后缩小区间往左找即可 因为保证有解,所以二分出来的mid值就是答案了 que

hdu 5288||2015多校联合第一场1001题

http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) , that there's no j(l<=j<=r,j<>i) satisfy ai mod aj=0,now OO want to know ∑i