【FJNUMCS暑假集训周赛#1】

本文解析了跑跑卡丁车系列算法题,包括游戏下载、登入密码优化、合成齿轮的最大数量及排车位方案数目的计算等问题。通过具体示例介绍了排序、二分查找、动态规划等算法的应用。

2016年暑假集训周赛#1

Problem A: 跑跑卡丁车系列之游戏下载

Time Limit: 1000 MS Memory Limit: 257792 KB
64-bit interger IO format: %lld Java class name: Main

某天,金斌在实验室玩跑跑卡丁车,众多群巨也一起加入其中。蛋蛋发现这是一个虐爆群巨的好机会,所以他也准备去下载游戏了!

但是由于不可抗力的原因,113的网速灰常快(man),所以每个群巨都有一个ai值。如果群巨当前网速小于这个值,那么群巨就会小情绪!!!

现在给出当前网速x,问有多少人没有小情绪。(假设:每个人都是x)

Input

测试数据有多组,每组输入一个N ( N <= 1e8 ),下一行输入N个数 ,表示每个人的ai值 ( ai < 1000)。接着输入一个Q( 1<= Q <=1e5),表示有Q个询问。每个询问输出一个数字。

Output

对于每个询问输出,在当前状态下,有多少人没有小情绪。

Sample Input

6
1 2 3 4 5 6
3
2
3
7

Sample Output

2
3
6

第一题没啥好用算法的,直接使用stl的upper_bound来求出大于等于这个数的下标。不过要先把数组排好序。

#include "iostream"
#include "string.h"
#include "algorithm"

using namespace std;

const int maxn = 100000+5;

int num[maxn];
int m;
int qus;
int ans;

int main(){
    int n;
    while(~scanf("%d",&n)){
        for( int i=0 ; i<n ; i++ ){
            scanf("%d",&num[i]);
         }
         sort(num,num+n);
         scanf("%d",&m);
         while(m--){
            scanf("%d",&qus);
            ans = upper_bound(num,num+n,qus)-num;
            printf("%d\n",ans);
         }
     }
    return 0; 
 }

Problem C: 跑跑卡丁车系列之登入密码——v2.0

Time Limit: 2000 MS Memory Limit: 128896 KB
64-bit interger IO format: %lld Java class name: Main
经过很长一段时间后,蛋蛋终于成功地安装好了游戏。由于蛋蛋太优秀了,他有好多的帐号,与之对应的就有好多的密码。突然他忘记了帐号所对应的密码。但没关系,在一段不可描述的操作之后,蛋蛋成功的想起了密码。突然他发现,原来的密码缺乏美感。所以他准备添加一些字母把密码改成一个回文串,由于金斌要开车了,蛋蛋想尽快解决这个问题,然后去虐爆金斌。所以他想知道最少要加多少个字母?
这个问题有两个版本。v1.0是小数据版本,v2.0是大数据版本。通过2.0的代码,肯定可以通过1.0。

Input

输入数据有多组,每组包含一个字符串长度(|S| < 5000 ),数据保证只含有小写字母

Output

最少应该加多少个字母

Sample Input

abba
caab

Sample Output

0
2

我们直接做大数据版本的题目,这个题目就是给你一个字符问再添加几个字符能构成 123454321 这样的回文。
直接用这个字符串与它的反转字符串求出最大公共子串。将它的长度减去这个公共子串的长度就是我们需要添加的字母的个数。

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"

using namespace std;

const int maxn = 1e4+5;

char str1[maxn],str2[maxn];
int dp[2][maxn];

int main()
{
    while(~scanf("%s",str1+1)){
        int n = strlen( str1+1 );
        for( int i = 1; i <= n; i++ ) str2[i] = str1[n-i+1];
        memset(dp,0,sizeof(dp));
        for( int i = 1; i <= n; i++ ){
            int u = i%2;
            int v = (i-1)%2;
            for( int j = 1; j <= n; j++ ){
                if( str1[i] == str2[j] )
                    dp[u][j] = dp[v][j-1] + 1;
                else
                    dp[u][j] = max( dp[u][j-1],dp[v][j]);
            }
        }
        printf("%d\n",n-dp[n%2][n]);
    }
    return 0;
}

Problem E: 跑跑卡丁车系列之开齿轮——v2.0

Time Limit: 1000 MS Memory Limit: 257792 KB
64-bit interger IO format: %lld Java class name: Main

蛋蛋登入游戏后发现,因为是回归玩家,系统送了他两辆车。但是蛋蛋非常嫌弃,直接开始虐金斌。跑了几局之后,蛋蛋果然虐爆的整个实验室。这时,任务窗口提示,蛋蛋获得了balabala材料。蛋蛋进入他的小屋发现,合成一个齿轮需要N个材料,每种材料需要ai个,蛋蛋仔细的搜索了他的仓库发现每种材料他已经有了bi个。蛋蛋当然不会浪费材料,所以他使用了一种不可描述的技能,可以直接获得一个某种材料。但是因为使用这种黑科技需要一定的体力,所以蛋蛋最多只能使用K次。问蛋蛋最多可以开多少个齿轮。

(v1.0是小数据版本,v2.0是大数据版本。通过2.0的代码,一定可以通过1.0)

Input

输入数据有多组,每组第一行包括两个整数N和K( 1 <= N <=  100 000, 1 <= K <= 1e9 ),N和K的意思如题所描述。第二行有N个整数表示合成一个齿轮所需要的材料ai( 1 <= ai <= 1e9 )。第三行有N个整数表示已经有的材料bi( 1<= bi <= 1e9 )

Output

输出蛋蛋最多可以开多少个齿轮

Sample Input

1 1000000000
1
1000000000
10 1
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000
1 1 1 1 1 1 1 1 1 1

Sample Output

2000000000
0

这题我们不能用已知条件去推出齿轮个数,这样不仅困难还容易爆炸。我们采用二分法二分齿轮个数并且当它增加的齿轮等于k值就弹出符合的齿轮个数

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"

typedef long long ll; 
using namespace std;

const int maxn = 1e5+5;

ll need[maxn],num[maxn];
ll n,k;

 ll serch( ll l,ll r ){
    while( l<=r ){
        ll mid = (l+r)/2;
        ll sum = 0;
        for( int i=0 ; i<n ; i++ ){
            if( num[i] < need[i]*mid ){
                sum += need[i]*mid-num[i];
                if(sum>k) break;
            }
        }
        if( sum==k ) return mid;
        if( sum<k ) l=mid+1;
        else r=mid-1;
    }
    return l-1;
 }

 int main(){
    while(scanf("%lld%lld",&n,&k)!=EOF){
        for( int i=0 ; i<n ; i++ ){
            scanf("%lld",&need[i]);
        }
        for( int i=0 ; i<n ; i++ ){
            scanf("%lld",&num[i]);
        }
        ll ans = serch(0,2e9+5);
        printf("%lld\n",ans);
    }
    return 0;
 }

Problem G: 跑跑卡丁车系列之排车位——v2.0

Time Limit: 1000 MS Memory Limit: 257792 KB
64-bit interger IO format: %lld Java class name: Main

在开了无数个齿轮之后,蛋蛋决定在小屋内给这些车排个顺序。他天真地认为:任意两辆车不在同一行,同一列就很美观。为了简化问题,我们把蛋蛋的小屋看成是一个N*N的方格,蛋蛋有K辆车要排。在之前的过程中,他因为使用太多不可描述的技能,已经无法思考了。请你告诉他一共有多少种方案。

Input

输入数据有多组,每组两个整数N和K,(1 <=N,K <= 30)

Output

输出有多少种方案,答案保证小于1e17

Sample Input

1 1
2 1
3 1
4 1
4 2
4 3
4 4
4 5

Sample Output

1
4
9
16
72
96
24
0

找规律,用二维数组打表

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"

using namespace std;


typedef long long LL;
const LL maxn = 1e17;
LL dp[31][31];
LL n,k;

int main(){
    LL ans;
    while(scanf("%lld%lld",&n,&k)!=EOF){
        LL fz = n*n;
        LL fm = 1;
        LL cnt = 2;
            /*while(k!=1){
                n--;
                fz *= n*n;
                fm *= cnt;
                cnt++;
                k--;
            }
            ans = fz/fm;
            cout<<"fz "<<fz<<endl;
            cout<<"fm "<<fm<<endl;
            cout<<ans<<endl;*/
            for( int i=0 ; i<=30 ; i++ ){
                for( int j=0 ; j<=30 ; j++ ){
                    dp[i][j]=1;
                }
            }
            for( int i=0 ; i<=30 ; i++ ){
                for( int j=1 ; j<=i ; j++ ){
                    dp[i][j] = (dp[i-1][j-1]*i*i/j);
                }
            }
            if(k>n) puts("0");
            else
            printf("%lld\n",dp[n][k]);
    }
    return 0;   
}

然后,美辰巨的题目做不出来~~~
我真菜啊。

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 StudentInfo 基于SSM的学生信息管理系统(选课) 已停更 项目简介: 由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。 前端主要由bootstrap完成,背景用particles.js插件。 数据库交互查询用到pagehelper分页。 在添加修改相关功能时通过ajax来验证其主键是否存在可用。 代码层次清晰,输入框约束较高,已配置登录拦截。 一、应用技术 #### 工具:eclipse、navicat 环境:JDK1.8、tomcat9.0、mysql8.0 前端:JavaScript、jQuery、bootstrap4、particles.js 后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页 二、功能 #### 这是在上个springmvc选课系统的基础上进行修改完善的,目前功能基本相同,修复诸多bug,上个系统中有详细介绍:B/S基于springMVC的网上选课系统 主要功能模块图: 新增: 增加分页查询 输入框约束 学号、身份证、课程编号、教师编号只能输入数字,并且有最大输入限制,其中学号固定12位,若小于12位将会有提示。 姓名只能输入中文。 几乎所有输入框不能输入空格等约束 下拉框联动 添加、修改课程采用二级联动,即所属系别——所属专业; 添加、修改学生采用三级联动,即系别——专业——班级。 (三级联动代码有些复杂,因为JavaScript学的不好=-=)。 ajax+springmvc验证 用于验证学号、课程编号、教师...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值