比赛链接:哈尔滨理工大学21级新生程序设计竞赛(同步赛)

文章目录

  • 前言
  • 正文
    • A.考试周破防
    • B.咖啡店
    • C.kiki和bob玩取石子
    • D.猴王kiki分桃
    • E.很二的拆分
    • F.构造字符串
    • G.信号之旅
    • H.小球滚动
    • I.kiki看球赛
    • J.跳一跳
    • K.Jay的小弟
  • 总结

前言

昨天python考试没参加,于是乎今天做一做。虽说简单,但真正做起来花了我三个小时,没借助任何外力,包括自己debug,只想说单凭自己做真的不容易即使很简单,自己的问题会被无限放大。一共做了十一个,前十一个。有两道题目意思理解错了(D、K),有点影响心态,先放下去做别的,后来又看发现意思理解错了(会放错误理解的代码);也有没考虑全面的题;也有思维上没想清楚导致wa了,总的来说,记录一下过程。


正文

做这些题感觉有点浪费时间了,简单代码不放了,可以去链接里找到提交后正确的代码,都写的挺简洁的。

A.考试周破防

签到

B.咖啡店

签到

C.kiki和bob玩取石子

博弈论,签到

D.猴王kiki分桃

题意读错,一直90分过不了。。。
n个猴子(包括kiki)都从篮子中拿走恰好一个桃子 草这里理解错了,一拿拿n个,而我以为可以不拿n个

#include <iostream>
#define int long longusing namespace std;//n个猴子(包括kiki)都从篮子中拿走恰好一个桃子   草这里理解错了signed main()
{int n,l,r;cin >> n >> l >> r;int ans;   //r%n          n-1ans = n-1ll;if(r/n*n < l || r/n*n > r){ans = r - r / n * n;}cout << ans << endl;return 0;
}/*
2 2 2
07 13 13
62 5 54 9 9
3
ans = 1
*/

E.很二的拆分

位运算,签到

F.构造字符串

简单动态规划问题,白书例题.

G.信号之旅

简单问题,分情况讨论即可.

#include <iostream>
#include <cstdio>
#include <cmath>using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int x1,y1,xb,yb,x2,y2;scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&xb,&yb);
//         cout << x1 << " " << y1 << " " << x2 << " " << y2 << " " << xb << " " << yb << endl;int ans = 0;if(x1!=x2 && y1!=y2){ans = abs(x2-x1) + abs(y2-y1);}else if(x1==x2 && y1!=y2){if(xb==x1 && ((yb>y1&&yb<y2) || (yb>y2&&yb<y1))){ans = abs(y2-y1) + 2;}else{ans = abs(y2-y1);}}else if(y1==y2 && x1!=x2){if(yb==y1 && ((xb>x1&&xb<x2) || (xb>x2&&xb<x1))){ans = abs(x2-x1) + 2;}else{ans = abs(x2-x1);}}printf("%d\n",ans);}return 0;
}

H.小球滚动

这里注意题目的意思是两边都能滚落,最短距离即为每个小球距离端点的最短距离的最大值;最大距离为每个小球距离端点的最长距离的最大值。(这里可能有点绕)

I.kiki看球赛

贪心即可。
个人认为这题需要排序,但其实不需要。

J.跳一跳

典型DP问题,背包问题,这里我写的dfs,注意剪枝不然超时。

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;typedef long long ll;ll ans = 0;
ll n;
ll a[100010];
bool st[100010];      //记录点的到达情况
void dfs(int step){if(step>n){ans = n;return;}st[step] = 1;if(a[step]<=0){ans = max(ans,(ll)step);return;}for(int i=1;i<=a[step];i++){if(st[step+i])    continue;         //如果这个点到达过了dfs(step+i);}
}int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)    scanf("%lld",&a[i]);dfs(1);cout << ans << endl;return 0;
}

K.Jay的小弟

这题给我整吐了,写了一百多行,发现题意读错了,还有就是别用cin,超时了…日。
对题目误解后的分析代码中有。

// //DP:对于每一个连续的jay、jya、ajy、ayj,yaj,yja有且仅有使用和不使用魔法.// // ans=max(ans*2,ans+1)
// // 注意到前面的连续jay可能会不适用魔法,越到后面的jay使用魔法的效果越好.
// // 因此只需要枚举前面几个连续jay的情况就可以(使用魔法和不使用魔法)o(n)// // 第一次出现jay的时候才可能会+1,当且仅当ans=0时.// #include <iostream>
// #include <cstdio>
// #include <algorithm>
// #include <vector>
// #include <stack>// using namespace std;// // 应该从后向前匹配jay串
// // JayJayJJJaaayyyJay// typedef long long ll;// const int MOD = 1e9 + 7;// string s;
// int len;
// // vector<int> vc;
// // stack<int> vc;
// int vc[100000000],top = -1;// bool check(int k){// //     if(k+2>len)    return false;//     if((s[k]=='J'&&s[k+1]=='a'&&s[k+2]=='y'))
//         return true;
//     return false;
// }// int main()
// {//     cin >> s;
//     len = s.size();
//     s = " " + s;
//     for(int i=len;i>=3;i--){//         if(check(i-2)){//             vc[++top] = i-2;
//             i -= 2;
//         }
//     }//     int cnt1 = 0,cnt2 = 0,cnt3 = 0;
//     ll ans = 0;
//     for(int i=1;i<=len;i++){// //         cout << i << " " << check(i) << endl;//         if(top!=-1 &&vc[top]==i){//             top--;
//             if(!ans){//                 ans = (ans + 1)%MOD;
//             }else{//                 ans = (ans * 2)%MOD;
//             }//             i += 2;
//         }else{//             if(s[i]=='J')    cnt1++;
//             if(s[i]=='a')    cnt2++;
//             if(s[i]=='y')    cnt3++;//             if(cnt1>=1 && cnt2>=1 && cnt3>=1){//                 cnt1--;
//                 cnt2--;
//                 cnt3--;
//                 ans = (ans + 1)%MOD;
//             }
//         }// //         cout << "ans=" << ans << endl;
//     }//     cout << ans << endl;//     return 0;
// }// /*
// if((s[k]=='J'&&s[k+1]=='a'&&s[k+2]=='y')
//       ||(s[k]=='J'&&s[k+1]=='y'&&s[k+2]=='a')
//       ||(s[k]=='a'&&s[k+1]=='J'&&s[k+2]=='y')
//       ||(s[k]=='a'&&s[k+1]=='y'&&s[k+2]=='J')
//       ||(s[k]=='y'&&s[k+1]=='J'&&s[k+2]=='a')
//       ||(s[k]=='y'&&s[k+1]=='a'&&s[k+2]=='J'))
// *//*重写题意理解错了.
*/
#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;typedef long long ll;const int MOD = 1e9 + 7;char s[100000010];
int len;
bool book[100000010];ll quick_mod(ll a,ll b){ll res = 1;while(b){if(b&1)    res = res * a % MOD;b >>= 1;a = a*a%MOD;}return res;
}int main()
{scanf("%s",s);len = strlen(s);ll cnt = 0;for(int i=len-1;i>=2;i--){if(s[i-2]=='J' && s[i-1]=='a' && s[i]=='y'){cnt++;book[i-2] = 1;i -= 2;}}int cnt1 = 0,cnt2 = 0,cnt3 = 0;for(int i=0;i<len;i++){if(book[i]){i+=2;}else{if(s[i]=='J')    cnt1++;if(s[i]=='a')    cnt2++;if(s[i]=='y')    cnt3++;}}ll ans = min(cnt1,min(cnt2,cnt3));if(ans==0){ans = 1;cnt--;}ll m = quick_mod(2ll,cnt);ans = (ans * m) %MOD;cout << ans << endl;return 0;
}

总结

还是有点收获:发现自己写基础算法如喝水hhh,写简单题如喝水哈哈哈哈哈哈,,,,,

牛客练习-哈尔滨理工大学21级新生程序设计竞赛(同步赛)相关推荐

  1. 哈尔滨理工大学21级新生程序设计竞赛(同步赛)错题笔记

    目录: 新生赛题目链接 C kiki和bob玩取石子 E 很二的拆分 F 构造字符串 G 信号之旅 H 小球滚动 I kiki看球赛 J 跳一跳 K Jay的小迷弟 L 翻转卡片 新生赛题目链接 C ...

  2. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解

    "科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...

  3. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解

    文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...

  4. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) F

    F 三角形 链接:https://ac.nowcoder.com/acm/contest/5758/F 来源:牛客网 小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数), 使 ...

  5. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 点对最大值 dp

    链接:https://ac.nowcoder.com/acm/contest/5758/A 来源:牛客网 题目描述 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点 ...

  6. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) E

    E 赛马 一天小明与他同学准备赛马,他们每人有n匹马,每匹马有一个固定的战力值,战力值高的马会战胜战力值低的马并赢得比赛.每匹马只能出场比赛一次.小明偷看到了他对手每匹马的出场顺序,小明在更改自己马出 ...

  7. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)

    A.点对最大值 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点以及路径上边权值之和,不包括路径上其他点值. 求这颗树上最大的点对价值为多少.点对至少需要两个点. ...

  8. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)

    比赛网址传送门 目录 A 点对最大值 B 减成一 C 面积 D 扔硬币 E 赛马 F 三角形 G 养花 H 直线 I 字典序 J 最大值 A 点对最大值 求这个树的直径,已经见过三次了,还是没打出来, ...

  9. “华为杯“ 武汉大学21级新生程序设计竞赛

    "华为杯" 武汉大学21级新生程序设计竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) D.和谐之树(线段树) #i ...

最新文章

  1. [java]处理utf-8 bom字符串的bom头
  2. javadrawstring设置字符大小_LaTex学术写作——编辑文档格式 设置论文标题与摘要...
  3. Html5添加原生radio按钮和checkbox复选框转换为非常好看的滑动开关按钮的插件教程...
  4. [CODEVS 1173] 最优贸易
  5. 深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】
  6. CF1009F-Dominant Indices【长链剖分】
  7. V-Play入门手册3-如何编写高效的代码?
  8. python time sleep 阻塞 异步_Python Tornado异步请求被阻塞
  9. Python数据分析与展示(一)(基于北理MOOC)
  10. 软件使用:如何彻底把VMware卸载干净
  11. 两个rsa密文相乘还能解密吗_RSA加密算法 | BitOL|比特在线-关注区块链技术动态的区块链导航...
  12. 阿里云商标注册续展有哪几种?阿里云商标注册续展有优惠券吗?
  13. macOS 手动清理垃圾文件
  14. Cent OS虚拟机安装最新详细教程
  15. 单元测试之moles
  16. 《 Kubebuilder v2 使用指南 》-P6-CRD Admission Webhook
  17. 9.leetcode题目189: Rotate Array
  18. 使用XGBoost在Python中进行特征重要性分析和特征选择
  19. 使用 http://tempuri.org/ 作为默认命名空间
  20. 论文导读:Unsupervised Person Re-identification via Multi-label Classification

热门文章

  1. NGINX+PHP+ZABBIX,推荐
  2. 第二十二篇 jQuery 学习4 内容和属性
  3. win7 oracle 冷恢复
  4. 纯css实现div中未知尺寸图片的垂直居中
  5. Key为数字的Json数据标准化成标准Json格式
  6. Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  7. 【CentOS】 Nginx+jdk+tomcat 环境搭建
  8. 微信小程序入门 ——增删改查+页面跳转+传值取值+布局样式
  9. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式 1
  10. Helpful links