atcoder ABC 279
阿新 • • 發佈:2022-12-09
前言
我只是一個入門沒多久的菜雞啊,程式碼挺殘缺的,所以謹慎觀看
A
題目的意思是,輸入一個字串,然後一個一個看,如果是v加一,如果是w加二。
#include<cstdio> #include<cstring> int ans; int main(){ char in[105]; scanf("%s",in); int len = strlen(in); for(int i =0;i<len;i++){ if(in[i]=='v')ans++; else ans+=2; } printf("%d",ans); return 0; }
B
判斷B字串是否為A字串的子字串
輸入方式
A
B
我的程式碼
#include<iostream>
#include<string>
using namespace std;
string a1,a2;
int main(){
cin>>a1>>a2;
if(a1.find(a2)!=string::npos){
cout<<"Yes"<<endl;
return 0;
}
cout<<"No"<<endl;
return 0;
}
C
題意可能是要問你輸入的兩個矩陣是否可以變化為一個矩陣。但是沒有關係啊,很顯然,只要每行的#數量一樣,那一定可以變化為同一個矩陣。
上程式碼
#include<iostream> #include<string> #define ll long long using namespace std; ll in[400005]; ll out[400005]; ll h, k; int main() { string n; cin >> h >> k; for (ll i = 0; i < h; i++) { cin>>n; for (ll j = 0; j < k; j++) { if (n[j] == '#') { in[i]++; } } } for (ll i = 0; i < h; i++) { cin>>n; for (ll j = 0; j < k; j++) { if (n[j] == '#') { out[i]++; } } } for (ll i = 0; i < h; i++) { if (in[i] != out[i]) { cout << "No" << endl; return 0; } } cout << "Yes" << endl; return 0; }
ABC只做ABC應該沒有問題吧(不是)
D
題意,要你找給定函式的最小值。
該函式為:F(x)=B*x-A/sqrt(x+1)
輸入格式:
A B
限制:
1≤A≤10 e18
1≤B≤10 e18
典型三分,但是這題比較特殊啊,因為是整數,所以我的程式碼可能有點怪。我實際上只是把二分的判斷條件改掉。
程式碼:
#include<iostream>
#include<math.h>
using namespace std;
long double a, b;
long double c, d;
long double func(long long x) {
return b * x + a / (sqrt(x + 1));
}
int main() {
cin >> a >> b;
c = a;
long long mid ,left,right;
if (a < b) {
mid = 1;
while (1) {
d = b * mid + a / (sqrt(mid + 1));
if (d > c) {
printf("%.10llf", c);
return 0;
}
c = d;
mid++;
}
}
else {
left = 0;
right = 1e18;
while (left <= right) {
mid = (right - left) / 2+ left ;
if (func(mid) < func(mid - 1) && func(mid) < func(mid + 1)) {
printf("%.10llf", func(mid));
return 0;
}
if (func(mid) < func(mid - 1)) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
}
return 0;
}