One night , I burned all my memories , and since then my dreams have been transparent.
One morning , I threw away all my yesterdays , and since then I have been light on my feet.
有一个夜晚我烧毁了所有的记忆,从此我的梦就透明了,
有一个早晨我扔掉了所有的昨天,从此我的脚步就轻盈了。
前言
坐标SD,提高组的废物。此蒟蒻因为某些不可抗因素太弱了没去成二轮,于是在家里谔谔。上周决定暂时AFO,VP一下J组的题,反正大概也写不出几道。
试题传送门:
题解
T1:
模拟,但是n<=,手动写了一遍样例,发现规律:
每一天减去拿的苹果数量,即减去向上取整n/3。然后你会发现标号为n的苹果数量将会在n%3==1时被拿。TAT
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
int n,cnt,ans;
int main()
{
//freopen("apple.in","r",stdin);
//freopen("apple.out","w",stdout);
scanf("%d",&n);
while(n)
{
cnt++;
if(n%3==1&&ans==0) ans=cnt;
n-=ceil(n/3.0);
}
printf("%d %d",cnt,ans);
//fclose(stdin);
//fclose(stdout);
return 0;
}
T1一如既往的代码量很少qwq。
发现小图灵有很多90pts的,会不会是暴力的锅.......阿哲。
T2:
一眼贪心,有点像洛谷P1016 [NOIP1999 提高组] 旅行家的预算,像原题弱化版awa
每次买够正好能到达下一个油价小于当前站点的站点的油。
预处理:用f储存每次行程需要在哪个站点购买油,用minn储存这个站点的油价。
一次循环:sum表示需要走的距离,x表示当前剩余油能够走的距离。
计算油量时需要向上取整,可以函数ceil(),或者手写。
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
int n,d,v[N],a[N];
int minn[N],f[N];
long long ans;
int main()
{
//freopen("road.in","r",stdin);
//freopen("road.out","w",stdout);
scanf("%d %d",&n,&d);
for(int i=2;i<=n;i++) scanf("%d",&v[i]);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
minn[1]=a[1],f[1]=1;
for(int i=2;i<n;i++)
{
if(a[i]<minn[i-1]) f[i]=i;
else f[i]=f[i-1];
minn[i]=min(minn[i-1],a[i]);
}
minn[n]=minn[n-1],f[n]=f[n-1];
//for(int i=1;i<=n;i++) cout<<minn[i]<<" "<<f[i]<<endl;
int i=1,x=0;
while(i<n)
{
long long sum=0;
int j;
for(j=i+1;j<=n&&f[i]==f[j-1];j++) sum+=v[j];
sum-=x;
x=ceil(sum*1.0/d)*d-sum;
ans+=ceil(sum*1.0/d)*minn[i];
i=--j;
}
printf("%lld\n",ans);
//fclose(stdin);
//fclose(stdout);
return 0;
}
调了两小时,总算过了。
200pts到手,T1+T2估计用时2h30min,还剩1h,感觉还能写T3。
注意:ans和sum都要开long long!十年OI一场空,不开long long见祖宗。qwq
T3:
CCF是懂大模拟的......
意料之中的大模拟,有点缺氧。
看到题目,这周数学刚学了一元二次方程(喜)
通过观察数据范围,我们发现6个点是特殊性质为C,即a、b都是整数(有理数),故我们可以光写出这一部分的解。
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
void solve(int a,int b,int c)
{
int dlt=b*b-4*a*c;
double x1=(-1.0*b-sqrt(dlt))/(2.0*a);
double x2=(-1.0*b+sqrt(dlt))/(2.0*a);
if(sqrt(dlt)*sqrt(dlt)==b*b-4*a*c)//有理数
{
int d=2*a,u;
if(x1>x2) u=-1*b-sqrt(dlt);
else u=-1*b+sqrt(dlt);
u/=__gcd(abs(u),abs(d)),d/=__gcd(abs(u),abs(d));//约分
if(u<0&&d<0) u*=-1,d*=-1;
else if(u>0&&d<0) u*=-1,d*=-1;
if(u%d==0) printf("%d\n",u/d);
else printf("%d/%d\n",u,d);
}
else printf("\n");
}
int main()
{
//freopen("uqe.in","r",stdin);
//freopen("uqe.out","w",stdout);
int T,M;
scanf("%d %d",&T,&M);
while(T--)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int dlt=b*b-4*a*c;
if(dlt<0) printf("NO\n");
else solve(a,b,c);
}
//fclose(stdin);
//fclose(stdout);
return 0;
}
洛谷上60pts。非有理数部分写不动了。
T4:
万万没想到,今年J组竟然会出最短路qaq,不过这道题似乎可以用BFS做。题目好抽象,看了一会感觉写不出来(我图论学了s),然后我就摆了。T_T
来自kkksc03的认证。
于是
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,k;
int u,v,a;
int main()
{
//freopen("bus.in","r",stdin);
//freopen("bus.out","w",stdout);
scanf("%d %d %d",&n,&m,&k);
while(m--) scanf("%d %d %d",&u,&v,&a);
printf("-1\n");
//fclose(stdin);
//fclose(stdout);
return 0;
}
写了个骗分......嘻嘻
完结。民间数据100+100+60+10=270pts。实际预计250pts+,大概能1=。我是废物qwq
on 2023/10/21
-EOF-
Update on 2023/10/22
看了S组的题,就能写出T1(我太菜了qwq)而且不一定对。话说今年T1似乎有点像水题,难道是幻觉???
希望明年能RP++。