[CSP-J 2023] 小苹果
#include <bits/stdc++.h>
using namespace std;
int n,ans=0,ans2=0;
bool flag=true;
int main()
{
freopen("apple.in","r",stdin);
freopen("apple.out","w",stdout);
cin >> n;
while(n)
{
ans++;
if(flag&&n%3==1)
{
flag=false;
ans2=ans;
}
n=n-ceil(n/3.0);
}
cout << ans << " " << ans2;
return 0;
}
[CSP-J 2023] 公路
#include <bits/stdc++.h>
using namespace std;
long long n,d;
long long v[100001],a[100001],s[100001];
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
cin >> n >> d;
for(int i=1;i<n;i++)
{
cin >> v[i];
s[i+1]=s[i]+v[i];
}
for(int i=1;i<=n;i++) cin >> a[i];
long long now=1,lc=0,spend=0;
for(int i=2;i<n;i++)
{
if(a[i] < a[now])
{
long long hs=(long long)(ceil((s[i]-lc)*1.0/d));
lc += hs*d;
spend+=hs*a[now];
now=i;
}
}
if(lc >= s[n])
{
cout << spend;
return 0;
}
else
{
spend += (long long)(ceil((s[n]-lc)*1.0/d))*a[now];
cout << spend;
}
return 0;
}
[CSP-J 2023] 一元二次方程
#include <bits/stdc++.h>
using namespace std;
int t,m;
int gcd(int a,int b)
{
if(b == 0) return a;
int r=a%b;
return gcd(b,r);
}
void print(int fz,int fm)
{
int k=gcd(fz,fm);
fz /= k;fm /= k;
if(fm < 0)
{
fm *= -1;
fz *= -1;
}
if(fm == 1) cout << fz;
else cout << fz << "/" << fm;
}
void solve()
{
int a,b,c;
cin >> a >> b >> c;
int delta=b*b-4*a*c;
if(delta < 0)
{
cout << "NO" << endl;
return ;
}
int g=0,r;
for(int i=sqrt(delta);i>=1;i--)
{
if(delta % (i*i) == 0)
{
g=i;
r=delta/(i*i);
break;
}
}
if(g*g == delta)
{
int fz,fm;
if(a > 0)
{
fz=-b+g;fm=2*a;
print(fz,fm);
}
else
{
fz=-b-g;fm=2*a;
print(fz,fm);
}
cout << endl;
return ;
}
else
{
if(b != 0)
{
int fz=-b,fm=2*a;
print(fz,fm);
cout << "+";
}
int fz,fm,k;
if(a > 0)
{
fz=g,fm=2*a;
k=gcd(fz,fm);
fz/=k;fm/=k;
}
else
{
fz=-g,fm=2*a;
k=gcd(fz,fm);
fz/=k;fm/=k;
}
if(fz == 1&&fm == 1) cout << "sqrt(" << r << ")" << endl;
else if(fm == 1) cout << fz << "*sqrt(" << r << ")" << endl;
else if(fz == 1) cout << "sqrt(" << r << ")/"<< fm << endl;
else cout << fz << "*sqrt(" << r << ")/" << fm << endl;
}
}
int main()
{
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
cin >> t >> m;
while(t--) solve();
return 0;
}
[CSP-J 2023] 旅游巴士
#include <bits/stdc++.h>
#define inf 1e9
using namespace std;
int n,m,k;
struct node
{
int v,a;
};
vector<node> arr[1000001];
struct node2
{
int id,t;
bool operator < (const node2&a) const
{
return t > a.t;
}
};
int dist[1000001],vis[1000001];
priority_queue<node2> que;
void Dijkstra()
{
fill(dist,dist+1000000,inf);
que.push({1,0});
dist[1]=0;
while(!que.empty())
{
node2 top=que.top();
que.pop();
if(vis[top.id] == 1||dist[top.id] < top.t) continue;
vis[top.id]=1;
for(int i=0;i<arr[top.id].size();i++)
{
int j=arr[top.id][i].v,w=arr[top.id][i].a,t=dist[top.id];
while(t < w) t+=k;
t++;
if(t < dist[j])
{
dist[j]=t;
que.push({j,dist[j]});
}
}
}
if(dist[n] == inf) cout << -1;
else cout << dist[n];
}
int main()
{
freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);
cin >> n >> m >> k;
int u,v,a;
for(int i=1;i<=m;i++)
{
cin >> u >> v >> a;
for(int j=0;j<k;j++)
{
//建立分层图
arr[j*n+u].push_back({((j+1)%k)*n+v,a});
}
}
Dijkstra();
return 0;
}