随便写写

这次写的非常爆炸,主要是有道题题意并不明确当然还有我自己的问题,这次难度比之前要高上不少,凑合着看吧

A

img
简单模拟题,没有什么可说的

]#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int a,b;
    cin >> a >> b;
    if(a >= 10 || b >= 10) 
    {
        cout << "-1" << endl;
    }
    else cout << a * b << endl;
    return 0;
}

B

img
只需要找出九九乘法表中能被i整除的数,再把整除的数和10比较即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int a;
    cin >> a;
    for(int i = 1; i <= 9; i++){
        if(a % i == 0){
            if(a / i < 10){
                cout << "Yes" <<endl;
                return 0;
            }
        }
    }
    cout << "No" << endl;
    return 0;
}

C

img
从这道题就开始离谱起来了,主要是完全改变了以前的出题风格,有点不适应
这道题考察了思维和几何方面的知识,注意要把双曲线对半分,只用考虑一边就可以了,时间复杂度就降低到根号n

include<bits/stdc++.h>

using namespace std;

define int long long

define endl '\n'

signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int k;
cin >> k;
int p = sqrt(k);
// cout << p << endl;
int res = 0x3f3f3f3f3f3f3f3f;
for(int i = 1; i <= p; i++){
if(k % i == 0){
res = min(res,k/i+i);
}
}
cout << res - 2 << endl;
return 0;
}

D

img
暂时无法解析
主要是样例都不知道什么情况,2 3 4是如何确立两个三角形的暂时还没有什么说法
看题解要用树状数组?

E

img
img
贪心+二分 从思维上讲也不太容易能想到

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,A[1000050],F[1000050];
inline bool cmp(int a,int b){return a>b;}
bool check(int x){
int res=0;
for(int i=1;i<=n;i++){
if(A[i]*F[i]>x) res+=A[i]-(x/F[i]);
 }
  return res<=k;
}
signed main(){
  cin>>n>>k;
  for(int i=1;i<=n;i++) scanf("%lld",A+i);
  for(int i=1;i<=n;i++) scanf("%lld",F+i);
  sort(A+1,A+1+n);
  sort(F+1,F+1+n,cmp);
  int L=0,R=1e18,M;
  while(L<R){
  M=(L+R)/2;
 if(check(M)) R=M;
  else L=M+1;
  }
  cout<<R;
  return 0;
}

F

正在琢磨中,暂时还不能看懂他的dp方程

总的来说,这次打的可以说是非常难受,也让我看到了很多的不足
争取下次我能做的更好

posted @ 2022-07-09 16:00  Sun-Wind  阅读(39)  评论(0编辑  收藏  举报