QDU第一届程序设计大赛——E到I题解法(非官方题解)
题目链接https://qduoj.com/contest/28/problems,密码:qdu1230
E题:
思路:先进行排序,然后去暴力模拟就可以,但可能WA了几次,导致此题没解出来,有点可惜
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>using namespace std;int a[3005];
int b[3005];
int main()
{int n,m;cin>>n>>m;for(int t=0;t<n;t++){scanf("%d",&a[t]);}for(int t=0;t<m;t++){scanf("%d",&b[t]);}sort(a,a+n);sort(b,b+m);int ma=0,mb=0;int maxna=0;int maxnb=0;for(int t=0;t<n;t++){for(int j=t;j<n;j++){if(ma==5){break;}if(a[j]-a[t]<=3){ma++;}else{ma=0;break;}maxna=max(maxna,ma);if(j==n-1){ma=0;}}}for(int t=0;t<m;t++){for(int j=t;j<m;j++){if(mb==5){break;}if(b[j]-b[t]<=3){mb++;}else{mb=0;break;}maxnb=max(maxnb,mb);if(j==m-1){mb=0;}}}cout<<maxna<<endl;cout<<maxnb<<endl;if(maxna<=maxnb){cout<<"liangliang\\O..o\\"<<endl;}else{cout<<"gg/o..O/"<<endl;}return 0;
}
F题:
思路:首先对于题目的理解不能有错误,是进行任意轮的命令判断是否能到达,不是就执行那一轮命令,那我们不妨设进行了k轮,然后把每次的坐标变换记录,判断在k轮是否能到达,k的值为(a-每一次的变化量)/一轮的变换量
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>using namespace std;string str;struct node
{int x,y;
}pos[1005];
int main()
{int a,b;while(cin>>a>>b>>str){int len=str.length();int x=0,y=0;int flag=0;if(x==a&&y==b){cout<<"Yes"<<endl;continue;}for(int t=0;t<len;t++){if(str[t]=='U')y++;if(str[t]=='D')y--;if(str[t]=='L')x--;if(str[t]=='R')x++;pos[t].x=x;pos[t].y=y;//cout<<pos[t].x<<" "<<pos[t].y<<endl;}int k;for(int t=0;t<len;t++){if(x){k=(a-pos[t].x)/x;}else if(y){k=(b-pos[t].y)/y;}if(k<0)k=0;if(a==k*x+pos[t].x&&b==k*y+pos[t].y){flag=1;break;}}if(flag){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}return 0;}
G题:G题看一下数据量就会明白暴力必然超时,那如何去解,我们可以进行分组枚举所有结果,然后,去另一个查找有多少个相等的。我们可以有1,4和2,3两种分法,我们看1,4也十分容易超时,故选用2,3,然后把所有的结果分别放在两个数组里。我们查找的时候用二分进行查找,故要先进行排序,然后我们在较小的里面找较大的,复杂度稍低,然后我们不应该是找是否存在,而应该找存在多少个,所以一个是找左边的下标,一个找右边的下标,这样一减就是个数。还有一个问题,就是开数组的大小,我一开始开的是1e6和1e4,但是会溢出,我就试着跑了下,一个在1e6+1e4左右,另一个没跑,直接就多开大算了。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;int a[10400000];
int b[14005];int k1,k2;
// 查找第一个相等的元素int findFirstEqual(int a[], int key) {int left = 0;int right = k1 - 1;while (left <= right) {int mid = (left + right) / 2;if (a[mid] >= key) {right = mid - 1;}else {left = mid + 1;}}if (left < k1 && a[left] == key) {return left;}return -1;
}
// 查找最后一个相等的元素int findLastEqual(int a[], int key) {int left = 0;int right = k1- 1;while (left <= right) {int mid = (left + right) / 2;if (a[mid] <= key) {left = mid + 1;}else {right = mid - 1;}}if (right >= 0 && a[right] == key) {return right;}return -1;
}
int main()
{int T;cin>>T;int x1,x2,x3,x4,x5;for(int t=0;t<T;t++){k1=0;k2=0;scanf("%d%d%d%d%d",&x1,&x2,&x3,&x4,&x5);for(int j1=-50;j1<=50;j1++){for(int j2=-50;j2<=50;j2++){for(int j3=-50;j3<=50;j3++){if(j1==0||j2==0||j3==0){continue;}a[k1++]=x1*j1*j1*j1+x2*j2*j2*j2+x3*j3*j3*j3; }}} for(int j1=-50;j1<=50;j1++){for(int j2=-50;j2<=50;j2++){if(j1==0||j2==0){continue;}b[k2++]=x4*j1*j1*j1+x5*j2*j2*j2;}}sort(a,a+k1);int sum=0;for(int j=0;j<k2;j++){int l,r;if(findFirstEqual(a,-b[j])!=-1&&findLastEqual(a,-b[j])!=-1){l=findFirstEqual(a,-b[j]);r=findLastEqual(a,-b[j]);sum+=r-l+1;}}cout<<sum<<endl;}return 0;
}
H题:是codeforce一道题的简化版,我的想法是去找原来的串,找原来的串可以通过最长的两个,和最短的两个来确定,通过拼接共有八中情况,由于题目说是有唯一存在,所以必然存在一种是两者相同的,这就是原来的串,找到原来的串,由于数据范围比较小,就可以暴力去找前缀和后缀了,标记一下,最后根据标记来判断前缀和后缀
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>using namespace std;string str[305];
string s1[305],s2[305];
int vis[305]={0};
int main()
{int n;cin>>n;for(int t=0;t<2*n-2;t++){cin>>str[t];}string len1[2],len_n[2];int k1=0,k2=0;for(int t=0;t<2*n-2;t++){if(str[t].length()==1){len1[k1++]=str[t];}if(str[t].length()==n-1){len_n[k2++]=str[t];}}string stand;string sss1[4],sss2[4];//八种情况sss1[0]=len1[0]+len_n[0];sss1[1]=len_n[0]+len1[0];sss1[2]=len1[1]+len_n[0];sss1[3]=len_n[0]+len1[1];sss2[0]=len1[0]+len_n[1];sss2[1]=len_n[1]+len1[0];sss2[2]=len1[1]+len_n[1];sss2[3]=len_n[1]+len1[1];for(int t=0;t<4;t++){for(int j=0;j<4;j++){if(sss1[t]==sss2[j]){stand=sss1[t];}}}// cout<<stand<<endl;string s[205];s[0]=stand[0];for(int t=1;t<n-1;t++){s[t]=s[t-1]+stand[t]; }for(int t=0;t<2*n-2;t++){for(int j=0;j<n-1;j++){if(str[t]==s[j]){vis[t]=1;}}}for(int t=0;t<2*n-2;t++){if(vis[t]==1){cout<<"P";}else{cout<<"S";}}cout<<endl;return 0;
}
I题:
思路:狼和草是可以共存的群体,羊和狼草都不能共存,我们就可以分为两大阵营,羊,狼草,然后他们的存在状态总的有两种,一在岸上,一种是在船上,当小的等于d时,如果两大阵营的大的超过船的两倍载重,就会出现混的情况,就会混乱,故当小的等于d时,多的必须小于等于2*d,当小的小于d是时,可以不断的去运多的,就不必考虑多的数量,都可以运
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>using namespace std;int main()
{int a,b,c,d;while(cin>>a>>b>>c>>d){int maxn=max(a+c,b);int minn=min(a+c,b);if(minn==d&&maxn<=2*d||(minn<d)){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}
转载于:https://www.cnblogs.com/Staceyacm/p/10781863.html
QDU第一届程序设计大赛——E到I题解法(非官方题解)相关推荐
- 中学生python程序设计大赛_贵州民族大学第一届程序设计大赛圆满举办
原标题:贵州民族大学第一届程序设计大赛圆满举办 为了推动和促进计算机程序设计艺术在校园内的推广与普及,提高同学们的逻辑分析能力.学习编程的兴趣.学生的创造力.团队合作精神以及实际动手能力,特举办贵州民 ...
- 中南林科大软件协会第一届程序设计大赛作品报告
软件协会第一届程序设计大赛 作品名称: 中南林业科技大学人员出入校管理系统 作 者: *** 填写日期: 2022.05.26 目 录 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 ...
- SWPUACM第一届程序设计大赛
文章目录 A 简单的字符串处理 B 多米诺骨牌 C 翻转棋 D 多次方程求解 E 约瑟夫升级 F 字符画打印,很简单哒 G 黄金矿工 H 天之杯 A 简单的字符串处理 TimeLimit: 1000m ...
- 【桂林信息科技学院第一届程序设计大赛】完整题解 C++
目录 A.Hello 小明 B.博学多识的小明 C.小明爱偶数 D.小明爱打单词 E.小明打篮球 F.小明爱数学 G.小明与张三 H.小明拿宝藏 I.小明的考试成绩 J.小明与鲜花 K.小明与小红的增 ...
- 江苏大学2021年第一届程序设计大赛(UJSCPC)题面
目录 A. 校门外的树 问题描述 输入形式 输出形式 样例输入 样例输出 B. 合格的素数 问题描述 输入形式 输出形式 样例输入 样例输出 C. 高精度乘法 问题描述 输入形式 输出形式 样例输入 ...
- 湘南学院第一届程序设计大赛题解(XNPC—2022)
题解目录 A.你的马蹄铁是在另一只蹄子上吗? 题目大意: 题解: 代码: B.判断奇因子 题目大意: 题解: 代码: C.死亡祝福 题目大意: 题解: 代码: D.奇怪的方程式 题目大意: 题解: 代 ...
- NUIST第一届程序设计大赛团队赛试题
A. 负鼠的追求者 题目描述 负鼠有一个讨厌的追求者,一直紧跟在她后面. 已知负鼠在位置x,它的追求者在位置p,其中1 ≤ p ≤ x.由于负鼠很讨厌这个追求者,所以只有他们所处位置互质的时候,负鼠才 ...
- NUIST第一届程序设计大赛团队赛题解
本次比赛,AK两题为签到题, 文章目录 A. 负鼠的追求者 解法1 解法2 B. Game 解法1 解法2 C. 犯困的负鼠 D. 天天爱跑步 E. 愉快的负鼠 F. Relative Molecul ...
- 2016 Bird Cup ICPC7th@ahstu--“波导杯”安徽科技学院第七届程序设计大赛
"波导杯"安徽科技学院第七届程序设计大赛 原文章网页 Contest - 2016 "Bird Cup" ICPC7th@ahstu Start time: ...
最新文章
- 传统网站性能优化的三种手段
- 剑指offer:分行从上往下打印二叉树
- PyQt5 笔记2 -- Qt Designer使用
- .NET多线程总结和实例介绍
- html table 转置,jQuery+CSS实现的table表格行列转置功能示例
- 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事
- 离模拟世界又近一步!谷歌推出开源量子计算平台OpenFermion
- 《高性能javascript》随笔
- 使用中值滤波器对图像降噪
- 秦时明月1架设用哪个java_秦时明月6.2搭建视频架设教程
- C语言读取易语言的字节集,易语言字节集参数传递详解
- MacBook如何配置环境变量
- apdu 移动sim_SIM卡APDU指令
- 华为手机的快应用是什么?如何使用快应用?
- cstimothy17-字段,属性,索引器,常量
- eclipse代码文件误删恢复方法
- 编写类A2, 定义方法find, 实现查找某字符串数组中的元素查找,并返回索引,如果找不到,返回-1
- Apollo第五讲——Apollo定位模块
- 使用matplotlib绘制高级图表8
- Android单点触控技术,对图片进行平移,缩放,旋转操作