- 伍衍 的博客
DAY9(8)
- @ 2024-8-14 19:50:19
考试错误:无。
思路:
思维题,每次减去(向上取整),减到需要的次数就是拿完苹果的天数,中间如果有一次,那么号苹果被拿走的天数就是当前减的次数
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
freopen("apple.in","r",stdin);
freopen("apple.out","w",stdout);
int n;
cin >> n;
int cnt=0,ans=0;
int flag=1;
while(n>0){
cnt++;
if(n%3==1&&flag){
flag=0;
ans=cnt;
}
n-=(n+2)/3;
}
cout << cnt << " " << ans;
}
考试错误:想用表示当前买的油的,结果赋值写成+=了。
思路:
贪心+模拟,每次买经过的加油站中最便宜的油即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+50;
int v[N],a[N];
int x(auto a,auto b){
return (a+b-1)/b;
}
signed main(){
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
int n,d;
cin >> n >> d;
for(int i=1;i<n;i++){
cin >> v[i];
v[i]+=v[i-1];
}for(int i=1;i<=n;i++){
cin >> a[i];
}
int m=0;
int _min=0xffffffff,ans=0;
int jj=0;
for(int i=1;i<n;i++){
int t=v[i]/d;
_min=min(_min,a[i]);
if(v[i]%d){
t++;
}
ans+=(t-m)*_min;
m=t;
}
cout << ans;
}
考试错误:没写。
思路:
首先,若,同乘-取反(这是为了保证第三句)
接着,定义
根据第一句,较大的根
分情况讨论:
- 无实根: ,输出
NO - 有实根: Δ ≥ 0 定义 (1) ,若,输出结果即可,若无法整除,约分后输出(建议封装成函数,后面会用到) () x= ① 是完全平方数,开方后减去 得到 ,判断 ,能整除直接输出,否则约分后输出 ② 不是完全平方数,尝试化简 为 的形式,答案分为两部分:(需要约分),若为,不需要输出+号。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
int trg=b*b-4*a*c;
int k=1,r=trg;
int gcd(int a,int b){
if(!b) return a;
return gcd(b,a%b);
}
void solve(int a,int b){
if(b==0){
cout << "0";
}else{
cout << (b*-1)/gcd(abs(2*a),abs(b));
if(2*a/gcd(abs(2*a),abs(b))!=1){
cout << '/' << 2*a/gcd(abs(2*a),abs(b));
}
}
}void solvee(int a,int b){
if(b==0){
cout << "0";
}else{
if((b*-1)/gcd(abs(2*a),abs(b))!=1){
cout << (b*-1)/gcd(abs(2*a),abs(b));
cout << "*";
}
cout << "sqrt(" << r << ")";
if(2*a/gcd(abs(2*a),abs(b))!=1){
cout << '/' << 2*a/gcd(abs(2*a),abs(b));
}
}
}
signed main(){
freopen("uqe.in","r",stdin);
freopen("uqe.out","w",stdout);
int t,m;
cin >> t >> m;
while(t--){
cin >> a >> b >> c;
trg=b*b-4*a*c;
if(a<0){
a*=-1;
b*=-1;
c*=-1;
}
if(trg<0) cout << "NO\n";
else if(trg==0){
solve(a,b);
cout << endl;
}else{
int t=sqrt(trg);
if(t*t==trg){
t-=b;
solve(a,-1*t);
cout << endl;
}else{
for(int i=sqrt(trg);i>=1;i--){
if(trg%(i*i)==0){
k=i;
r=trg/(i*i);
break;
}
}
if(b){
solve(a,b);
cout << '+';
}
solvee(a,-1*k);
cout << "\n";
}
}
}
}