首页 > 其他分享 >第一周题解

第一周题解

时间:2024-01-28 21:45:27浏览次数:21  
标签:return 第一周 int 题解 long st num ans

第一周周报
这一周是寒假训练的第一周,训练内容主要就是做牛客上的题单还有比赛,牛客上的题单还是比较痛苦的,因为牛客压根看不了测试用例,导致我事后想知道错的例子是什么都看不了。做第一题第二题还有倒数第三题有一两个例子一直都过不去。检查了很久的代码,一直是差一两个例子,就老是想用自己代码思路去解决问题,就卡很久。


个人训练就是巩固了二维数组,dfs和差分算法,对三个算法的理解和应用又加深了一些。之后寒假的时间就准备对每个算法分别都进行加深理解,还是有很大的进步空间的,希望在以后竞赛取得更好成绩。
写了一些我觉得有意思的题的题解
题单1.数学考试,正解使用到离散化和前缀和,我的方法相对来说比正解要简单一点,
用了前缀和算法了两次,比较巧妙的来计算分数的最大值。第一次前缀是来计算分数,第二次前缀是截取一部分的分数总和。

include<bits/stdc++.h>

using namespace std;
int main(){
int t;
cin>>t;
while(t--){
long long n,k,num[2000005]={0},ans=-1e18,ss[2000006]={0};
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
cin>>num[i];
num[i]+=num[i-1];
}
for(int i=1;i<=n;i++){
if(i-k>=0)
ss[i]=num[i]-num[i-k];
}
num[n]=ss[n];
for(int i=n-1;i>=1;i--)
num[i]=max(ss[i],num[i+1]);
for(int i=k;i<=n;i++)
ans=max(ans,ss[i]+num[i+k]);
printf("%lld\n",ans);
}
}
题单I值周
这个就是用到了差分,与简单版本比较差别就是数据范围要更大了点。跟CF上面的一道题比较像。我是用结构体数组来存储数字,一个存储值,一个来存1或-1.再用快排进行排序,遍历一遍来求的结果

include<bits/stdc++.h>

//#define int long long;
using namespace std;
struct pe{
long long a,b;
}st[2000006];
bool compare(struct pe q,struct pe w){
if(q.a!=w.a)
return q.a<w.a;
else
return q.b>w.b;
}
signed main(){
long long n,m;
scanf("%lld%lld",&n,&m);
long long y=1;
for(int i=1;i<=m;i++){
long long a,b;
scanf("%d%d",&a,&b);
st[y].a=a;
st[y].b=-1;
st[y+1].a=b;
st[y+1].b=1;
y+=2;
}
sort(st+1,st+2m+1,compare);
long long ans=st[1].a,num=-1;
for(long long i=2;i<=2
m-1;i++){
if(num==0){
ans+=st[i].a-st[i-1].a-1;
}
num+=st[i].b;
}
ans+=n-st[2m].a;
printf("%d",ans);
return 0;
}
PTA7-14寻宝图
这一题其实就是深搜,自己也第一时间想到了这一算法,但是提交过程中发现内存会爆,用来标记的vis数组满足不了数据范围,当时冥思苦想了很久也没有解决,例子最后一个没有通过。
补题时想到利用字符串数组来存储,并且还是利用字符串来标记走过的路程,只需要把走过的点设为‘
’,来达到标记的作用。

include<bits/stdc++.h>

using namespace std;
string s[100005];
int X[5]={0,-1,0,1,0},Y[5]={0,0,1,0,-1},vis[9999][9999];
int ans,num,n,m,ju;
void dfs(int x,int y){
if(s[x][y]>='2'&&ju==0)
num++,ju=1;
s[x][y]='';
for(int i=1;i<=4;i++){
int x1=x+X[i],y1=y+Y[i];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&s[x1][y1]!='0'&&s[x1][y1]!='
')
dfs(x1,y1);
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>s[i];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(s[i][j]!='0'&&s[i][j]!='*'){
ju=0;
dfs(i,j);
ans++;
}
}
}
cout<<ans<<' '<<num;
}
PTA 拯救007;
这一题当时做的时候知道使用dfs,但是想了很久感觉到无从下手,赛后补题时看了正解,慢慢有了思路。
把007跳过的过程分为三部分,分别用三个函数来实现.第一个是判断是否能到岸上,因为有四个方向所以if判断语句中有四个条件。第二个函数是第一步跳的位置来用一个函数判断。
第三个函数就是dfs函数,不断搜索并调用其他函数实现过程。真的是要把功能分块实现更加条理清晰。

include<bits/stdc++.h>

using namespace std;
struct node
{
int x,y;
}p[110];
int vis[110];
int flag = 0;
int n,m;
int keyi(int x)//如果可以成功到达岸边
{
if((p[x].x - m<=-50)||(p[x].x + m>=50)||(p[x].y - m<=-50)||(p[x].y + m >=50))
return 1;
return 0;
}
int first(int x)//第一步
{
int p1 = pow(p[x].x,2);
int p2 = pow(p[x].y,2);
int r = (m+7.5)(m+7.5);
if(p1+p2<=r)
return 1;
return 0;
}
int jump(int x,int y)//能否从一个鳄鱼头跳到另一个鳄鱼头
{
int p1 = pow(p[x].x - p[y].x,2);
int p2 = pow(p[x].y - p[y].y,2);
int r = m
m;
if(p1+p2<=r)
return 1;
return 0;
}
int dfs(int t)
{
vis[t] = 1;
if(keyi(t) == 1)
{
flag = 1;
}
for(int i=0;i<n;i++)
{
if(!vis[i]&&jump(t,i))
{
flag = dfs(i);
// if(flag == 1)
// break;
}
}
return flag;
}
int main()
{
memset(vis,0,sizeof(vis));
scanf("%d %d",&n,&m);
int i;
for(i=0;i<n;i++)
{
scanf("%d %d",&p[i].x,&p[i].y);
}
if(m>=42.5)
{
printf("Yes\n");
}
else
{
for(i=0;i<n;i++)
{
if(!vis[i]&&first(i))
{
dfs(i);
}
}
if(flag == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
这一周比赛还是有收获的,对我有收获的题写了题解,其他的好多都考虑的不够周全一直wa,还有一部分题,算法还没有学到就没有补了。
希望接下来收获更大,继续努力!!!

标签:return,第一周,int,题解,long,st,num,ans
From: https://www.cnblogs.com/niubuniu/p/17993455

相关文章

  • P4145 上帝造题的七分钟 2 / 花神游历各国 题解
    题目链接:上帝造题的七分钟2/花神游历各国差不多的题:[YnoiEasyRound2023]TEST_69注意到对某个点来说暴力单点即为反复的:\(x=\sqrt{x}\),最终为\(1\),根据\(master\)主定理可知,跟\(veb\)树分析差不多的,复杂度为:\(O(\log{\log{V_{max}}})\)。不懂的可以去学学这篇文章。那......
  • 第一周
    第一章第一节——什么是系统科学系统科学是以系统为研究对象的学科群。系统科学即以系统为研究对象的科学,按研究角度的不同分为系统论、信息论、控制论三方面内容;系统科学是一门横断科学。系统科学的抽象程度比哲学低比具体科学大,其适用范围也比哲学低比具体科学大,是一门介于哲......
  • 洛谷题解-[ARC001B] リモコン
    https://www.luogu.com.cn/problem/AT_arc001_2题目描述 输入格式无输出格式无题意翻译题目描述:高桥君要调整空调的设定温度。现在的设定温度是A度,而他想调到B度。空调遥控器按一次可以:上调或下调1度上调或下调5度上调或下调10度高桥君想求出从A调到B度的最小......
  • P1197 [JSOI2008] 星球大战 题解
    P1197[JSOI2008]星球大战题解题目链接P1197[JSOI2008]星球大战简要思路看完题目的第一印象是——连通性。图论中判断连通性很容易想到并查集,但是并查集只支持合并和查询,并不支持删除,怎么办呢?考虑逆向思维,把删点的过程倒过来,看成加点和连边,那么此题就可以非常方便的用并......
  • 洛谷题解-P1938 [USACO09NOV] Job Hunt S
    https://www.luogu.com.cn/problem/P1938题目描述Bessieisrunningoutofmoneyandissearchingforjobs.FarmerJohnknowsthisandwantsthecowstotravelaroundsohehasimposedarulethathiscowscanonlymakeD(1<=D<=1,000)dollarsinac......
  • ATtokiomarine2020E O(rand) 题解
    题目链接点击打开链接题目解法首先,\(S\)一定要是\(T\)的子集先筛出符合条件的\(a_i\),即满足\(S\subseteqa_i\subseteqT\)令\(dif\)为\(T-S\),定义数\(x\)覆盖第\(y\)位为二进制下\(x\)的第\(y\)位为\(1\)现在的问题变成了找到大小\(\lek\)的\(\{a_i\}......
  • winter 2024 第一周周报
    训练内容winter2024day1题解https://www.cnblogs.com/bible-/p/17980600算是考完试后第一场正式训练,练的蓝桥杯,这场不算难打打恢复下状态 winter2024day2题解https://www.cnblogs.com/bible-/p/17983616组队vp了23年新疆那场,6题第三(队友太厉害了qwq),题基本补了。感觉J......
  • 洛谷题解-P2888 [USACO07NOV] Cow Hurdles S (Floyd)
    https://www.luogu.com.cn/problem/P2888题目描述FarmerJohnwantsthecowstoprepareforthecountyjumpingcompetition,soBessieandthegangarepracticingjumpingoverhurdles.Theyaregettingtired,though,sotheywanttobeabletouseaslittleene......
  • 第一周寒假acm训练总结
    本周训练让我切身体会了算法的魅力和学习需求,还有很多的算法需要我去掌握。这是其中我印象较为深刻的一道题P1048[NOIP2005普及组]采药我的理解是,将草药一个一个放入背包中,如果放入时超过了限重,则最佳方案为不放入,即dp[i-1][j]=dp[i][j];反之则判断放入的方案和不放入的方案......
  • ABC338 F Negative Traveling Salesman 题解
    QuestionABC338FNegativeTravelingSalesman给出一个\(N\)个点\(M\)条边的有向图,边权可能为负数,但不可能有负环每经过一条边就要加上这条边的代价求,一条路径经过所有的点,并且要求总代价最小Solution观察到\(N\le20\)自然而然想到状压因为多次经过一条边的代价是......