春季每日一题第一周题解

  • 你知道你的ABC吗(推理)
  • 放养但没有完全放养(贪心)
  • 牛年(模拟)
  • 牛的学术圈 I(前缀和 + 技巧)
  • 奶牛体操(思维 + 图论)

你知道你的ABC吗(推理)

题目链接

解题思路:
由于题面已经给出了A,B,C的大小关系。那么对于这几个数,我们知道A肯定是最小的,A+B+C是最大的,对于B,C的关系,我们假设B与A之间有一个数x,那么这个x要满足严格小于B,但是在剩余的数中我们是找不到满足条件的,因此,可以推出B是第二小的,那么我们由A + B + C 的值就可以得到C的值。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 10;
int a[N];
int n = 7;int main(){for(int i = 0 ; i < n ; ++i)cin>>a[i];sort(a,a+n);for(int i = 0 ; i < 2 ; ++i)cout<<a[i]<<" ";cout<<a[n-1] - a[0] - a[1]<<endl; // 发现也不用找,应为C一定存在,那么直接用A + B + C 的值 减去A 和B的值即可return 0;
}

放养但没有完全放养(贪心)

题目链接

解题思路:
这就是一个按位匹配,就是他听到的字母一定是有序(按照牛文)的,如果不是,那么就是新唱了一遍。
那么就是一直匹配就行了。

对于做法,我们库将听到的串,每匹配到一个就删去。那么当字符串长度为0的时候就匹配完全了。

代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const int N = 1010;string str , s;int main(){cin>>str>>s;int cnt = 0;while(1){cnt++;int n  = str.size();for(int i = 0 ; i < n ; ++i )if(str[i] == s[0])s.erase(s.begin());if(s.size() == 0) break;}cout<<cnt<<endl;return 0;
}

牛年(模拟)

题目链接

解题思路:
pre 表明这个人在前边也就距离Bessie 更远 , next 则是更近。我们对于每一个人存的都是距离Bessie 的距离。

  1. 如何存储值,对于每个人对应的值和生肖我们可以用map来存。
  2. 生肖刚开始的值,可以用map然后手动初始化,或者利用循环。
  3. 对于pre我们有两种对于关系,一个是我的生肖就在你前边,那么我就不用再跨越一个年份去找了。同理next ,如果已经在后边了也是。

代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
using namespace std;
const int N = 1100000 , INF = 0x3f3f3f3f;map<string,int>st, ans; // ans 是 答案,也就是距离 ,st 是生肖的位置
map<string,string>bk; //记录人对应的生肖int n ;
string str ,a ,b , op ,anl ,bnl;
string ss[14] = {"","Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig", "Rat"} ;void init(){for(int i = 1 ; i <= 12 ; ++i)st[ss[i]] = i;
}int main(){init();cin>>n;ans["Bessie"] = 0 , bk["Bessie"] = "Ox";while(n--){for(int j = 1 ; j <= 8 ; ++j){cin>>str;if(j == 1) a = str; if(j == 8) b = str;if(j == 4) op = str; if(j == 5) anl = str;}bk[a] = anl , bnl = bk[b];if(op == "next"){if(st[anl] > st[bnl]) ans[a] = ans[b] - (st[anl] - st[bnl]);elseans[a] = ans[b] - ( 12 - st[bnl] + st[anl]); }else{ // preif(st[anl] < st[bnl]) ans[a] = ans[b] + (st[bnl] - st[anl]);elseans[a] = ans[b] + (  st[bnl] + 12 -  st[anl] ); }}cout<<abs(ans["Elsie"])<<endl;return 0;
}

牛的学术圈 I(前缀和 + 技巧)

题目链接

题目大意
题目是要求一个最大的h,这个h满足在序列中的值大于等于h的个数至少有h个。同时由L个引用的机会。

解题思路
我们先暂时不管L个引用。对于前一个问题,我们可以对每一个数值用一个数组存下出现的个数。之后对这个数组求前缀和,那么我们就可以0(1)的复杂度,求出序列中值在[L,R]区间内的个数为s[R] - s[L-1].这样我们就解决了第一个问题。对于第二个问题,如果不限制对同一篇论文的引用次数的话,这题就复杂得多了。但是由于有了限制,那么对于h来说,哪些能通过后面这个引用满足条件呢,那就是与其差1的值的个数.如果num 小于 h,我们就看min(L,c[h-1]) >= h - num就可以了

  • 为什么加min呢,是因为我们要求的需要的个数是,值为h-1个个数中我们能用L次引用提高上来的部分。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5 + 10;int n , m;
int s[N], a[N] , c[N];int main(){cin>>n>>m;for(int i = 1; i <= n ; ++i){cin>>a[i];c[a[i]]++;}for(int i = 1 ; i < N ;  ++i)s[i] = s[i-1] + c[i];int h ;for( h = 1;  h  ; ++h){int num = s[N-1] - s[h-1];if(num >= h)continue;if(min(m,c[h-1] ) >= h - num)continue;break;}cout<<h-1<<endl;return 0;
}

奶牛体操(思维 + 图论)

题目链接

解题思路

在这里我们可以抽象,将排名之间的关系看成一条边。即每一次排名中,如果i在j前边,那么就建立一条i指向j的边。那么在所有关系都建立完之后,我们遍历所有的点对,如果i到j有边,但j到i没有边,那么就说明这么多次排名中j都没有在i前边,那么次数加1。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 110;
int in[N] ,a[N];
int n , m;
bool st[N][N];int main(){cin>>m>>n;while(m--){for(int i = 1 ; i <= n ; ++i)cin>>a[i];// 建立关系for(int i = 1 ; i <= n ; ++i)for(int j = i + 1 ; j <= n ; ++j)st[a[i]][a[j]] = 1;}int ans = 0;for(int i = 1 ; i <= n ; ++i)for(int j = 1 ; j <= n ; ++j){if(st[i][j] && !st[j][i]) // 由于在建边的时候没有建立自己指向自己的所有不用特判ans++ ; //如果i 指向j ,但j没有指向i,说明在这么多次排名中i都在j前边}cout<<ans<<endl;return 0;
}

acwing----春季每日一题2022篇(一)相关推荐

  1. acwing----春季每日一题2022篇(二)

    春季每日一题2022篇(二) 三角形(枚举) 社交距离 I (分类讨论 + 贪心) 混合牛奶(模拟) 果壳游戏(模拟 + 技巧) 困牛放牧(分类 + 数学知识) 三角形(枚举) 题目链接 题目大意 题 ...

  2. acwing----春季每日一题2022篇(五)

    春季每日一题2022篇(五) 牛奶桶(完全背包) 钻石收藏家(树状数组) 方法一:树状数组 方法二:双指针 马拉松(枚举) 奶牛线路 删减(字符串操作) 哞加密 牛奶桶(完全背包) 题目链接:牛奶桶 ...

  3. AcWing春季每日一题 Week1

    文章目录 1.AcWing 3346. 你知道你的ABC吗 2.AcWing 3358. 放养但没有完全放养 3.AcWing 3370. 牛年 4.AcWing 3745. 牛的学术圈 I 5.Ac ...

  4. 春季每日一题2022 Week 2 【完结】

    目录 1671. 三角形[暴力] 1659. 社交距离 I[二分] 1714. 混合牛奶[模拟] 1695. 果壳游戏[枚举] 1671. 三角形[暴力] #include<bits/stdc+ ...

  5. 春季每日一题2022 Week 1 【完结】

    目录 3346. 你知道你的ABC吗[排序] 3358. 放养但没有完全放养[贪心] 3370. 牛年[模拟] 3745. 牛的学术圈 I[二分] 1459. 奶牛体操[暴力] 1442. 单词处理器 ...

  6. Acwing春季每日一题 混合牛奶(朴素做法和优化做法)

    感谢大佬们的点赞Orz\color{purple}{感谢大佬们的点赞~Orz}感谢大佬们的点赞 Orz 题目描述 农业,尤其是生产牛奶,是一个竞争激烈的行业. Farmer John 发现如果他不在牛 ...

  7. AcWing寒假每日一题2058. 笨拙的手指

    AcWing寒假每日一题2058. 笨拙的手指 题目描述 奶牛贝茜正在学习如何在不同进制之间转换数字. 但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔. 每当贝茜将数字转换为一个新的进制并写下结果 ...

  8. AcWing寒假每日一题

    **此文章持续更新,直至寒假没有每日一题!!!! 习题目录 Week 1: 货仓选址 数字三角形 Week 2 蛇形矩阵 红与黑 回文平方 剪绳子 分巧克力 校门外的树(简单暴力法) 奖学金 十三号星 ...

  9. 每日一题 —— Java篇

    目录 1.在线编程网站 2.每日一题 - 俩数之和 在这个不断发展的信息化时代,各个领域各个专业的人才越来越拔尖,如何做 到在人群之中凸显出来就变得尤为重要,作为一名程序员对于算法要精通,尤 其想要入 ...

最新文章

  1. 【每日一算法】1比特与2比特字符
  2. 0x08.基本算法 — 总结与练习
  3. 找不到命令报错bash:command not found解决方案
  4. C++:sprintf()的用法(转)
  5. spring框架学习笔记(一)
  6. 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的
  7. 科目三夜考考试内容及过关攻略
  8. oracle 解死锁权限,讲解Oracle数据库中结束死锁进程的一般方法
  9. struts2 html post large data,struts2文件上传限制大小问题
  10. 用三张图宏观把握数据库
  11. virtualbox centos安装增强工具
  12. 关于oracle存储微信表情emoji问题 “[[%F0%9F%A4%AA]]“
  13. 东方通tongweb的安装及使用(图文详细版)
  14. 联想服务器重装系统后usb无法启动,联想启天装win7系统的详细教程完美解决USB不能用的问题...
  15. 解线性方程组 c语言,C语言解线性方程组
  16. php如何识别flac文件,flac是什么格式
  17. 智能家居生活之视频监控
  18. 时间转换——CONVERT (VARCHAR,getdate(),23)
  19. 获取手机IMEI/ICCID/IMSI
  20. 大数据入门-大数据技术概述(一)

热门文章

  1. linux——apache
  2. mybatis中getMapper是怎么通过动态代理得到dao接口的实现类并执行mapper文件sql语句的
  3. 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码
  4. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(二)
  5. spring-boot-starter-parent 作用
  6. linux查看发ftp的ip地址,linux常用命令及学习小结(4)--IP设置、samba、ftp
  7. 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM
  8. labview除了全局变量还有别的办法_地中海贫血除了移植,还有什么办法?
  9. Netty ObjectPool对象池技术原理分析
  10. ping php支付,thinkphp框架中引出ping++支付server SDK