专栏文章
8.18上午东塘407-蒋 程皓楠总结
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio915zj
- 此快照首次捕获于
- 2025/12/02 15:20 3 个月前
- 此快照最后确认于
- 2025/12/02 15:20 3 个月前
T2
错误
思路完全错了
正确思路
通过题目我们可以发现这道题其实是贪心,当她手中的钱足够还清当前累积的债时,就会前往最早的点还钱,然后处理后面的朋友,因为尽早还清债可以减少后面的债,而且最早的还债点还可以求出最小的额外行走的距离。
100pts code
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int a[N];
signed main()
{
int n;
cin>>n;
int ans=n;
for(int i=1;i<=n;i++)cin>>a[i];
int money=0;
int minn=1e18;
int pos=0;
for(int i=1;i<=n;i++)
{
if(a[i]>=0) money+=a[i];
else
{
minn=min(minn,i);
pos+=a[i];
}
if(money>=abs(pos)&&pos&&money)//如果钱够还清债
{
ans+=(i-minn)*2;
money-=abs(pos);
pos=0;//清空
minn=1e18;
}
}
cout<<ans;
return 0;
}
T4
考场思路
暴力强行拿下10分
正确思路
从题目我们可以发现,灯的状态是有限的,所以当某个状态重复出现时,说明已经进入了循环,找到循环后,就可以用B个单位对周期长度取余,直接计算最终答案
100pts code
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int a[N];
string s[N];
map<string,int> ma;
void print(string str)
{
int len=str.size();
for(int i=0;i<=len;i++)cout<<str[i]<<"\n";
return ;
}
signed main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
char c;
cin>>c;
s[0]+=c;
}
ma[s[0]]=1;
for(int i=1;i<=m;i++)
{
string str=s[i-1];
s[i]=s[i-1];
for(int j=2;j<=n;j++)
{
if(str[j-2]=='1')
{
if(str[j-1]=='1')s[i][j-1]='0';
else s[i][j-1]='1';
}
}
if(str[n-1]=='1')
{
if(str[0]=='1')s[i][0]='0';
else s[i][0]='1';
}
if(ma[s[i]])
{
string str=s[i];
int pos;
for(int j=0;j<i;j++)
{
if(str==s[j])
{
pos=j;
break;
}
}
int changdu=i-1-pos+1;
m-=pos-1;
if(m%changdu==0)print(s[i-1]);
else print(s[pos+m%changdu-1]);
return 0;
}
ma[s[i]]=1;
}
print(s[m]);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...