HDU 6474 (循环节)
解题思路:#
显然按按钮的过程中有循环节,找到循环节并记录一个循环按的次数和用的钱数以及一个循环中亏了最多的花费是多少
代码#
#include <bits/stdc++.h>
using namespace std;
/* freopen("k.in", "r", stdin);
freopen("k.out", "w", stdout); */
// clock_t c1 = clock();
// std::cerr << "Time:" << clock() - c1 <<"ms" << std::endl;
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#define de(a) cout << #a << " = " << a << endl
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, a, n) for (int i = n; i >= a; i--)
#define ls ((x) << 1)
#define rs ((x) << 1 | 1)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<ll, ll> PLL;
typedef vector<int, int> VII;
#define inf 0x3f3f3f3f
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll MAXN = 2e5 + 7;
const ll MAXM = 2e6 + 7;
const ll MOD = 1e9 + 7;
const double eps = 1e-6;
const double pi = acos(-1.0);
ll a[MAXN];
int vis[MAXN];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
ll n, k;
scanf("%lld%lld", &n, &k);
for (int i = 0; i < n; i++)
{
vis[i] = 0;
scanf("%lld", &a[i]);
}
ll cnt = 0, minn = INF, tot = 0;
ll ans = 0;
while (!vis[k % n] && k >= 0)
{
ans++;
vis[k % n] = 1;
k += a[k % n];
}
if (k < 0)
printf("%d\n", ans);
else
{
int st = k % n;
do
{
ans++;
cnt++;
tot += a[k % n];
k += a[k % n];
minn = min(tot, minn);
if (k < 0)
break;
} while (k % n != st);
if (tot >= 0 && minn + k >= 0)
printf("-1\n");
else
{
ll lop = 0; //总圈数
if ((k + minn) < 0)
lop = 0;
else
lop += (k + minn) / -tot+((k + minn) % -tot != 0);
ans += lop * cnt;
k += lop * tot;
while (k >= 0)
{
ans++;
k += a[k % n];
}
printf("%lld\n", ans);
}
}
}
return 0;
}
分类:
解题笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用