1. 程式人生 > 其它 >atcoder ABC 279

atcoder ABC 279

前言

我只是一個入門沒多久的菜雞啊,程式碼挺殘缺的,所以謹慎觀看

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;
}