A. Nth power of n

单点时限: 1.0 sec

内存限制: 512 MB

求 nn 的个位数。

输入格式

多组输入,处理到文件结束。
每组数据输入一个 n。(1≤n≤109)

输出格式

输出 nn 的个位数。

思路:

简单的快速幂。

B. 复读机的力量

单点时限: 2.0 sec

内存限制: 512 MB

Codancer: “我好菜啊!”
Dicer: “我好菜啊!”
Todest: “我好菜啊!”
CaprYang: “我好菜啊!”

大佬们又开始装弱了,真正的菜鸡瑟瑟发抖不敢说话。

我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
我们规定一个人是复读机当且仅当他说的每一句话都是复读前一个人说的话。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。
规定一个复读机的熟练度为复读数量的多少。现在给你一段聊天记录,请你找出其中的复读机们。

输入格式

输入T组,(1≤T≤10) 
每组第一行输入一个正整数N,表示聊天记录的长度(1≤N≤10000)。
接下来N行,每行两个字符串,前一个字符串为姓名,后一个字符为聊天记录。
保证所有字符串长度不超过50,保证所有字符串只包含小写字母.

输出格式

如果没有复读机,输出 “Unbelievable!”(不包含引号)
否则按照熟练度从大到小输出所有的复读机,如果熟练度相同,按照字典序从小到大输出。

样例

input
1
4
codancer iamsovegetable
dicer iamsovegetable
todest iamsovegetable
capryang iamsovegetable
output
capryang
dicer
todest

思路:

利用map字典的功能来增加熟练度,并将map数据存入数组进行排序输出。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<string,string> P;
const ll MAX=1e9+;
struct node{
string s;
int a; }arr1[+] ;
bool cmp(node x,node y){
if(x.a!=y.a)
return x.a>y.a;
return x.s<y.s;
}
int main(){
vector<P>arr;
P p;
ll a,b;
cin>>a;
string s1;
string s2;
while(a--){
cin>>b;
map<string,int>mp;
map<string,int>mp1;
for(int i=;i<b;i++){
cin>>s1>>s2;
p.first=s1;
p.second=s2;
arr.push_back(p);//将数据存进数组
}
mp1[arr[].first]=;//mp1是判断他是不是复读机是的话为1
for(int i=;i<b;i++){
if(!mp1[arr[i].first]){
if(arr[i].second==arr[i-].second){//判断这一句与前一句是否相同
mp[arr[i].first]++;//mp来存熟练度
} else{//如果不相同说明说这句画的人不是复读机
mp1[arr[i].first]=;
mp[arr[i].first]=;//令他的熟练度为0
}
}
}
int i=;
if(mp.size()){//存入map的个数
map<string,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++){
if(it->second){//复读机且熟练度不为0存入到一个数组
arr1[i].s=it->first;
arr1[i].a=it->second;
i++;//数组中个数
}
}
if(i==){
puts("Unbelievable!");
}
else{ sort(arr1,arr1+i,cmp);//排序
for(int j=;j<i;j++){
cout<<arr1[j].s<<endl;
}
}
}
else{
puts("Unbelievable!");
}
arr.clear();
} return ;
}
 

C. 无穷的小数

单点时限: 1.0 sec

内存限制: 512 MB

在十进制下,我们能够很轻易地判断一个小数的位数是有穷的或无穷的,但是把这个小数用二进制表示出的情况下其有穷性和无穷性就会发生改变,比如

十进制下的 0.5 ,在二进制下的值为 0.1 ;
十进制下的 0.75 ,在二进制下的值为 0.11 ;
十进制下的 0.6 ,在二进制下的值为 0.1001100......

给你一个十进制的小数,判断其在二进制表示下小数位数是否无穷。

输入格式

多组输入,处理到文件结束
每组数据输入一个六位的小数 n.(0≤n<1)

输出格式

如果在二进制下小数位数是有穷的,输出”YES”,否则输出”NO”.

样例

input
0.500000
0.600000
0.750000
output
YES
NO
YES

思路:

十进制小数转化为二进制小数时,可以采用乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。

因为精度问题要将小数先化为整数,然后操作,当一个数循环到一定数目后小数部位仍然不为0,即可判断它为无限循环小数。

D. Special String

单点时限: 2.0 sec

内存限制: 512 MB

我们定义一个字符串S为Special String只要这个字符串满足下面这些条件:
1.这个串是回文的,即把这个字符串正着读和反着读相同,如abba和aca,而ba和abca则不是。
2.26个小写字母必须全部出现
3.这个串的长度为偶数。
对于给定的S,判断它是否是Special String.

输入格式

输入一个只由小写字母组成的字符串S。(1≤|S|≤105)

输出格式

如果这个字符串是Special String,输出”YE5”,否则输出”N0”

样例

input
aaaa
output
N0
input
abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba
output
YE5

思路:

根据要求逐一判断即可。注:尽量将输出内容复制粘贴到代码中,以免Wa和Pe.

E. Max Gcd

单点时限: 2.0 sec

内存限制: 512 MB

一个数组a,现在你需要删除某一项使得它们的gcd最大,求出这个最大值。

输入格式

第一行输入一个正整数n,表示数组的大小,接下来一行n个数,第i个数为ai。(2≤n≤105,1≤ai≤109)

输出格式

输出删除掉某个数以后的gcd的最大值。

样例

input
4
2 4 8 1
output
2
input
4
1 2 3 4
output
1

提示

样例一:删除第四个元素后,2,4,8的最大公因子为2。
样例二:无论删除哪一个,最大公因子都为1。

思路:

多个数求最大公约数时,前n-1个数的公约数与第n个数一起求得的公约数即为前n个数的最大公约数。

方法可用前缀后缀法,然后遍历数组,求减去某一个数后最大公约数。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int q[+];
int h[+];
int arr[+];
int main(){
int n,ans=;
cin>>n;
for(int i=;i<n;i++){
cin>>arr[i];
}
q[]=arr[];
h[n-]=arr[n-];
for(int i=;i<n;i++){
q[i]=__gcd(q[i-],arr[i]);
h[n-i-]=__gcd(h[n-i],arr[n-i-]);
}
ans=max(h[],q[n-]);
for(int i=;i<n-;i++){
ans=max(ans,__gcd(q[i-],h[i+]));
}
cout<<ans;
return ;
}

F. Count Prime Pairs

单点时限: 2.0 sec

内存限制: 512 MB

对于数组a,如果i≠j并且ai+aj是一个质数,那么我们就称(i,j)为质数对,计算数组中质数对的个数。

输入格式

第一行输入一个n,表示数组的长度,接下来n个整数,第i个数代表ai。
(1≤n≤100000,0≤ai≤100)

输出格式

输出数组中质数对的个数。

样例

input
3
1 2 3
output
4

提示

样例说明:a1+a2,a2+a1,a2+a3,a3+a2都为质数,总共有四对。

思路:

解题关键在于要知道将同一元素合并,然后判断任两元素之和是否为素数。提醒自己:越到最后,越不能乱,静下心来,认真思考。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int arr[];
int arr1[+];
int arr2[+];
map<int,int>mp;
void su(){
for(int i=;i<;i++){
if(!arr[i]){
for(int j=i*;j<;j+=i){
arr[j]=;
}
}
}
}
int main(){
arr[]=;
arr[]=;
su();
int a,b,sum=,k=,j=;
cin>>a;
for(int i=;i<a;i++){
scanf("%d",&b);
mp[b]++;
}
map<int,int>::iterator it1;
map<int,int>::iterator it2;
for(it1=mp.begin();it1!=mp.end();it1++){
for(it2=mp.begin();it2!=mp.end();it2++){
if(!arr[it1->first+it2->first]){
if(it1==it2)
sum+=(it1->second*(it2->second-));
else
sum+=(it1->second*it2->second);
}
}
}
printf("%d\n",sum);
return ;
}

G. 平行线

单点时限: 2.0 sec

内存限制: 512 MB

“大猩猩为什么不喜欢平行线?”“因为平行线没有相交”
哈哈哈哈哈哈哈哈哈


为了管理动物园不听话的大猩猩们,动物管理员Boctorio 决定去远方的ACM之城找一些平行线,当他逛到一个神奇的店铺时,他发现了一副黑色的图,上面依稀可见一些白色的点。Boctorio 询问店铺老板这幅画是什么,老板说:“天机不可泄露”。等Boctorio仔细端详了一会这幅画后,他惊讶的发现其中所蕴含的奥秘。向店铺老板道谢后,他拿着刚买的这幅画,就连忙赶回动物园。

输入格式

输入一个数 n(1≤n≤1000),表示点的个数。
接下来n行,每行两个整数 xi,yi(1≤xi,yi≤109),表示第i个点。
数据保证没有重复的点

输出格式

输出用这些点所能表示出来的平行线段的对数。(两条不同的线段重合也算为平行)

样例

input
6
0 0
1 0
1 1
3 1
3 3
5 4
output
10

思路:

使用求斜率的方法。也可用向量,下面是学长简短明了的代码。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N = ;
typedef long long ll;
int x[N],y[N];
int main(){
int n;
cin>>n;
map<pair<int,int> ,int> k;
set<pair<long long,long long> > all;
long long ans=;
for(int i=;i<=n;i++) cin>>x[i]>>y[i];
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
int dx=x[j]-x[i];
int dy=y[j]-y[i];
if(dx<&&dy<){
dx=-dx;
dy=-dy;
}
long long gc=__gcd(dx,dy);
dx/=gc;dy/=gc;
k[{dx,dy}]++;
all.insert({dx,dy});
}
}
for(auto v:all){
ans+=(k[v]*(k[v]-)/);
}
cout<<ans<<endl;
return ;
}

H. Area of polygons

单点时限: 2.0 sec

内存限制: 512 MB

现在有a个边长为1的正方形,b个半径为1的圆,c个边长为1的等边三角形,现在你随机拿出一个图形,求这个图形面积的期望。

输入格式

第一行输入一个T,代表输入的组数。(1≤T≤100) 
接下来T行,每行三个数字a,b,c(1≤a,b,c≤1000)。

输出格式

输出T行,对于每一组输入,输出面积的期望,小数点后保留三位小数。

样例

input
3
1 2 3
4 5 6
7 8 9
output
1.430
1.487
1.501

提示

圆周率为3.1415926535897

思路:

数学要学好。

I. 双色球

单点时限: 2.0 sec

内存限制: 512 MB

双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝色球号码组成一注进行单式投注。其中奖规则为:

一等奖(6+1)
二等奖(6+0)
三等奖(5+1)
四等奖(5+0、4+1)
五等奖(4+0、3+1)
六等奖(2+1、1+1、0+1)
其中(a+b)即为有a个红色球,b个蓝色球与开奖某个数字相同(只与数字有关,与位置无关)。
现在你有 n 张双色球彩票,以及本场彩票开奖结果,请你求出这 n 张彩票获得的最高奖。

输入格式

第一行输入一个 n ,表示 n 张彩票
接下来 n 行,每行 7 个数字,表示每张彩票的选号,其中前六个位红色球,后一个为蓝色球。
接下来一行,输入 7 个数字,表示开奖结果,其中前六个为红色球,后一个为蓝色球。

输出格式

输出所有彩票中能获得的最高等级奖,若无,则输出”0”。

样例

input
5
2 17 21 28 30 32 10
2 12 17 29 30 31 15
9 10 19 25 26 30 12
6 8 18 29 30 31 10
13 14 21 22 27 32 8
6 7 12 19 27 28 12
output
6
input
3
2 17 21 28 30 32 10
2 12 17 29 30 31 15
9 10 19 25 26 30 12
6 8 18 29 30 31 10
output
6

提示

彩票六个红色球数字均为从小到大排列

思路:

直接比较即可,不知道自己代码错哪,意外ac。

学长代码如下:

#include<bits/stdc++.h>

using namespace std;
pair<int,int> solve(vector<int> a,vector<int> b){
int num[];
memset(num,,sizeof(num));
int r=;
int bl=;
for(int i=;i<;i++){
num[a[i]]++;
}
for(int i=;i<;i++){
if(num[b[i]]) r++;
}
if(a[]==b[]) bl=;
return {r,bl};
}
int cal(pair<int,int> pii){
if(pii.first==&&pii.second==) return ;
if(pii.first==&&pii.second==) return ;
if(pii.first==&&pii.second==) return ;
if((pii.first==&&pii.second==)||(pii.first==&&pii.second==)) return ;
if((pii.first==&&pii.second==)||(pii.first==&&pii.second==)) return ;
if((pii.first==&&pii.second==)||(pii.first==&&pii.second==)||(pii.first==&&pii.second==)) return ;
return ;
}
const int N = 1e3+;
vector<int> a[N];
int main(){
int n;
cin>>n;
for(int i=;i<=n;i++){
int x;
for(int j=;j<;j++){
cin>>x;
a[i].push_back(x);
}
}
int ans=;
vector<int> b();
for(int i=;i<;i++) cin>>b[i];
for(int i=;i<=n;i++) {
ans=min(ans,cal(solve(a[i],b)));
}
if(ans==) ans=;
cout<<ans<<endl;
return ;
}
 

J. Remainder Minimization 2019

单点时限: 1.0 sec

内存限制: 512 MB

给你一个区间[L,R],在这个区间内找到两个不同的数字i,j,使得(i∗j)%2019的值最小。

输入格式

输入两个数 L,R,(1≤L<R≤109)

输出格式

如题

样例

input
4 5
output
20
input
2020 2040
output
2

思路:

脑子短路。在他区间内有任何2019的倍数即为0。

#include<bits/stdc++.h>

using namespace std;
int main(){
long long L,R;
cin>>L>>R;
if(R-L>) cout<<<<endl;
else{
int ans=;
for(int i=L;i<=R;i++){
for(int j=i+;j<=R;j++){
ans=min(ans,((i%)*(j%))%);
}
}
cout<<ans<<endl;
}
return ;
}

加油,努力,像大佬学习。

HPU暑期集训积分赛1的更多相关文章

  1. HPU暑期集训积分赛2

    A. 再战斐波那契 单点时限: 1.0 sec 内存限制: 512 MB 小z 学会了斐波那契和 gcd 后,老师又给他出了个难题,求第N个和第M个斐波那契数的最大公约数,这可难倒了小z ,不过在小z ...

  2. 河南理工大学算法协会暑期集训积分赛(二)网络同步赛-Numbers of interval-尺取法

    原题链接:https://hpuoj.com/contest/24/problem/E/ 思路:一般的尺取法,不断更新左端点的值. #include<iostream> #include& ...

  3. 2014年CCNU-ACM暑期集训总结

    2014年CCNU-ACM暑期集训总结 那个本期待已久的暑期集训居然就这种.溜走了.让自己有点措手不及.很多其它的是对自己的疑问.自己是否能在ACM这个领域有所成就.带着这个疑问,先对这个暑假做个总结 ...

  4. 8.10 正睿暑期集训营 Day7

    目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...

  5. 8.6 正睿暑期集训营 Day3

    目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...

  6. 8.9 正睿暑期集训营 Day6

    目录 2018.8.9 正睿暑期集训营 Day6 A 萌新拆塔(状压DP) B 奇迹暖暖 C 风花雪月(DP) 考试代码 A B C 2018.8.9 正睿暑期集训营 Day6 时间:2.5h(实际) ...

  7. 8.8 正睿暑期集训营 Day5

    目录 2018.8.8 正睿暑期集训营 Day5 总结 A 友谊巨轮(线段树 动态开点) B 璀璨光滑 C 构解巨树 考试代码 A B C 2018.8.8 正睿暑期集训营 Day5 时间:3.5h( ...

  8. 8.7 正睿暑期集训营 Day4

    目录 2018.8.7 正睿暑期集训营 Day4 A 世界杯(贪心) B 数组(线段树) C 淘汰赛 考试代码 A B C 2018.8.7 正睿暑期集训营 Day4 时间:5h(实际) 期望得分:. ...

  9. 8.5 正睿暑期集训营 Day2

    目录 2018.8.5 正睿暑期集训营 Day2 总结 A.占领地区(前缀和) B.配对(组合) C 导数卷积(NTT) 考试代码 T1 T2 T3 2018.8.5 正睿暑期集训营 Day2 时间: ...

随机推荐

  1. 大白话5分钟带你走进人工智能-第30节集成学习之Boosting方式和Adaboost

    目录 1.前述: 2.Bosting方式介绍: 3.Adaboost例子: 4.adaboost整体流程: 5.待解决问题: 6.解决第一个问题:如何获得不同的g(x): 6.1 我们看下权重与函数的 ...

  2. 开源joda-time使用demo

    开源joda-time 1.maven中引入 <dependency> <groupId>joda-time</groupId> <artifactId> ...

  3. CSS3常用转换总结

    一.2D转换 translate(npx,npx) 相对当前元素位置移动 /* 实现div向左移动50个像素,并向下移动100个像素 */ div { transform: translate(50p ...

  4. c++ 队列的基本应用

    c++ 队列的基本应用 题目描述 现在去营业厅办理业务,都要先取号,再等待叫号.叫号系统有两种模式: 1.取号,取号时要输入自己的11位电话号码,号码按取号的顺序存在系统中: 2.叫号,叫号时会显示当 ...

  5. Yarn原理

    欢迎关注我的公众号<小沈干货>,谢谢大家. 一.可以将YARN看作是分布式操作系统,在大数据组件中,YARN的定位是: 1)集群资源管理中心 2)任务调度中心 YARN的功能进一步可以细化 ...

  6. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  7. python 3.7 新特性 - popitem

    百度上大多文章说 popitem  随机删除字典的一个键值对 python 3.7 官方文档已经说了,popitem 删除字典最后一个添加进去的键值对

  8. 程序员要搞明白CDN,这篇应该够了

    最近在了解边缘计算,发现我们经常听说的CDN也是边缘计算里的一部分.那么说到CDN,好像只知道它中文叫做内容分发网络.那么具体CDN的原理是什么?能够为用户在浏览网站时带来什么好处呢?解决这两个问题是 ...

  9. Netty-Channel架构体系源码解读

    全文围绕下图,Netty-Channel的简化版架构体系图展开,从顶层Channel接口开始入手,往下递进,闲言少叙,直接开撸 概述: 从图中可以看到,从顶级接口Channel开始,在接口中定义了一套 ...

  10. 1.jdk1.7到jdk1.8 Map发生了什么变化(底层)?

    1.8之后hashMap的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链表+红黑树.也就是说在JVM存储hashMap的K-V时仅仅通过key来决定每一个entry的存储槽位(Node[ ...