2018 HNUCM ACM集训队选拔第一场

1.小c的倍数问题

http://acm.hdu.edu.cn/showproblem.php?pid=6108

分析:

比赛的时候真的是各种想,结果发现自己是想多了。。。数论基础差得一批

求有多少个因子的时候,不能直接1到q-1暴力去求,要sqrt(q-1),所以每次有%=0的时候,都是加2,因为我们算的是sqrt(q-1),注意如果i*i==q-1的时候,只加1

这个自己一开始都没想通,对为什么要加2还感到奇怪。。。

看来以后得多写数论了。。。

code:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int sum=2;
        n--;
        for(int i=2;i<=sqrt(n);i++)
        {
            if(n%i==0&&i*i!=n)
                sum+=2;
            if(n%i==0&&i*i==n)
                sum++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

2.24点问题

http://10.10.10.170/vjudge/contest/view.action?cid=6#problem/A

A - 24

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice FZU 2284

Description

有一天dark sil在玩24点,被杰哥看见了,杰哥就想到了这样一个问题:假设有N张卡片,上面写着1,2,3....N,是否可以用这些卡片组成24点呢?要求是只能使用加减乘除(整除),所有的卡片都必须用上,并且只能使用一次。如果可以组成24点,则输出"Yes",否则输出“No”.

假设N等于5,那么存在1*2*(3+4+5)=24.

Input

包含多组测试数据,每组测试数据的第一行输入一个数字T,表示接下去输入T组数据。

接下去T行,每一行输入一个N,意思如题目中所描述。

T≤30,n≤100000

Output

对于每组数据,输出一行"Yes"或者“No”

Sample Input

2 3 4

Sample Output

No

Yes

分析:

3.迷宫寻宝(BFS)

第一次写bfs题。。。菜

直接套bfs模板

我们可以用一个队列来记录一些点,每一次都取出队首元素,然后对其进行4个方向的探索,如果当vis[fx][fy]!=0的时候,代表已经找到终点,此时就退出程序,输出次数就行。(vis[fx][fy]代表的是从起始点到终点一共移动的步数)

#include<bits/stdc++.h>
using namespace std;
#define max_n 1005
char a[max_n][max_n];//记录图形

int vis[max_n][max_n];//记录点的使用情况

int dir[4][2]={-1,0,//方向引导数组
1,0,
0,1,
1,-1};

struct point
{
    int x,y;
};
struct point temp1,temp2;
queue<point> Q;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int sx,sy,fx,fy;//起点和终点的坐标
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            scanf("%s",a[i]);
        }
        for(int i=0;i<n;i++)//找到起点和终点
        {
            for(int j=0;j<n;j++)
            {
                if(a[i][j]==‘S‘)
                {
                    sx=i;
                    sy=j;
                }else if(a[i][j]==‘E‘)
                {
                    fx=i;
                    fy=j;
                }
            }
        }
        while(!Q.empty())//队列清空
        {
            Q.pop();
        }
        vis[sx][sy]=1;
        temp1.x=sx;
        temp1.y=sy;
        Q.push(temp1);
        int flag=0;
        while(!Q.empty())
        {
            temp1=Q.front();
            Q.pop();
            for(int i=0;i<4;i++)
            {
                temp2.x=temp1.x+dir[i][0];
                temp2.y=temp1.y+dir[i][1];
                if(temp2.x>=0&&temp2.y>=0&&temp2.x<n&&temp2.y<n&&vis[temp2.x][temp2.y]==0&&a[temp2.x][temp2.y]!=‘#‘)
                {
                    vis[temp2.x][temp2.y]=vis[temp1.x][temp1.y]+1;
                    Q.push(temp2);
                }
            }
            if(vis[fx][fy]==1)
            {
                flag=1;
                break;
            }
        }
        if(flag==1)
        {
            printf("%d\n",vis[fx][fy]-1);
        }else
        {
            printf("-1\n");
        }
    }
    return 0;
}

4.RPG

C - RPG

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice FZU 2286

Description

Simon最近迷上了一款RPG游戏,现在他要从坐标(0,0)沿着y轴跑到坐标(0,100),他每秒能跑1个单位长度。

可是沿途的怪物可不会让他这么容易的就跑到,怪物会选择最优路径进行拦截,而且每个怪物跑的都比Simon快。

当怪物和Simon在同一坐标的时候,就会爆发战斗。但是Simon强,无敌,战斗一开始就可以把怪物秒了(也就是说,战斗是不消耗时间的)。

现在Simon想知道跑到目的地前他要和几只怪物战斗。(在目的地爆发的战斗也要计算在内)

Input

题目包含多组测试数据,每组测试数据第一行包含一个正整数n,表示怪物个数。

接下来n行,每行三个整数x,y,v,表示怪物当前的坐标和移动速度(单位长度/秒)。

n≤10^5,-1000<=x<=1000,-1000<=y<=1000,1<=v<=1000

Output

输出一个整数,表示战斗场数

Sample Input

3 0 0 5 0 200 1 0 201 1

Sample Output

2

分析:

脑洞题,只要所有怪兽能在100s内到达终点的话,就一定会遇到

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        double x,y,v;
        int sum=0;
        while(n--)
        {
            scanf("%lf %lf %lf",&x,&y,&v);
            if(sqrt(x*x+fabs(y-100)*fabs(y-100))*1.0/v<=100)
                sum++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

5.给力的移动

D - 给力的移动

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status Practice FZU 2287

Description

你的弟弟给你安排了一个任务,他给了你1到N个数字的乱序排列,现在你想给你的弟弟秀一波操作,操作最少的次数把序列变成1到N的顺序排列,每次操作你可以选择序列中的一个数字并把它移动到序列的头部或尾部。

Input

包含多组测试数据。

每组测试数据的第一行为正整数N,表示排列的长度。

第二行为N个数字的乱序排列。

n≤100000

Output

输出最少的操作次数

Sample Input

6 6 3 2 4 5 1

Sample Output

3

分析:

带限定条件的最长递增子序列问题(LIS问题)

就问你间隔为1的最长递增子序列的长度是多少

然后n减去LIS序列的长度,就是需要操作的次数

ps:写过几道LIS的题目,比赛却没有想到,被自己蠢哭。。

#include<bits/stdc++.h>
using namespace std;
#define max_n 10005
int dp[max_n];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(dp,0,sizeof(dp));
        int result=0;
        for(int i=0;i<n;i++)
        {
            int x;
            scanf("%d",&x);
            dp[x]=dp[x-1]+1;
            result=max(dp[x],result);
        }
        printf("%d\n",n-result);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/yinbiao/p/9275688.html

时间: 2024-10-06 06:20:01

2018 HNUCM ACM集训队选拔第一场的相关文章

2016暑期选拔第一场20160709

A みねちゃんの修罗场 Time Limit: 5000 mSec    Memory Limit : 1024 KB  Problem Description みねちゃん是个成绩优秀大学二年级学生,本来是和像自己妹妹一般的青梅竹马一起过着普通的大学生活的,但某天却被校内公认的第一美人表白了.然而她的真实意图却是为了骗过众人而需要みねちゃん与她假扮情侣.被掌握了自己的某个"秘密"的みねちゃん被迫假扮"男友"这一角色--然而在此之后他的"未婚妻"也

2018杭电多校第一场(A)

题意:x+y+z = n , n%x=0,n%y=0,n%z=0,求x*y*z 的最大值 题解: ac code: #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int t; scanf("%d",&t); while(t--) { ll n; scanf("%lld",&n); n = n*n*n; if(n%27 ==

2015 ACM多校训练第一场

在下面网址看效果更佳>_< http://mlz000.github.io/2015/08/07/2015-ACM%E5%A4%9A%E6%A0%A1%E8%AE%AD%E7%BB%83%E7%AC%AC%E4%B8%80%E5%9C%BA/ 题外话 这个暑假以前就决定要把这次多校的所有题全补了,中间断断续续,总算把第一场的题补全了,鄙视一下颓废的自己... hdu 5288(1001) OO's Sequence Solution 水题,定义两个数组L[i],R[i]示第i个数左侧和右侧最接

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,可惜我没有)

暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了... 2018 Multi-University Training Contest 1 HDU6298.Maximum Multiple 题目意思就是给你一个n,找出来三个数x,y,z, 使得n=x+y+z,而且x,y,z都是n的因数,并且x*y*z为最大值,让你输出来x*y*z的最大值.如果没有满足条件的情况就输出-1. 由1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4,所

2018.10.2浪在ACM 集训队第二次测试赛

2018.10.26 浪在ACM 集训队第二次测试赛 题目一览表(Green color indicate understand and Accept) 来源 考察知识点 完成时间 A 1273 海港(比赛过题) NOIP 普及组 2016 查分数组+二分 2018.10.26 D 1272 回问日期(比赛过题) NOIP 普及组 2016 思维? 2018.10.26 G 1268 扫雷游戏(比赛过题) NOIP 普及组 2015 暴力 or DFS 2018.10.26          

2018.11.16 浪在ACM 集训队第五次测试赛

2018.11.16 浪在ACM 集训队第五次测试赛 整理人:李继朋 Problem A : 参考博客:[1]朱远迪 Problem B : 参考博客: Problem C : 参考博客: Problem D : 参考博客:[1]朱远迪 Problem E : 参考博客: 原文地址:https://www.cnblogs.com/QLU-ACM/p/9977949.html

HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)

http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n开始,表示每天的食物清单有n种食物. 接下来n行,每行两个整数a和b,其中a表示这种食物可以带给湫湫的幸福值(数值越大,越幸福),b表示湫湫吃这种食物会吸收的卡路里量. 最后是一个整数m,表示湫湫一天吸收的卡路里不能超过m. 思路: 完全背包. 一开始以为是01背包. 敲了01后样例2不对啊!!! 然后改成完全就过了..就改循环体就好了.. #includ

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

hdu5289||2015多校联合第一场1002贪心+RMQ

http://acm.hdu.edu.cn/showproblem.php?pid=5289 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff has a ability. Now, Tom is going to assign a special task to