Codeforces Round #560 (Div. 3)A,B,C,D,E

做出四题,C题WA了 一发,D题WA了2发,按我现在的rating值来说,应该会涨吧,如过一切顺利的话,马上就蓝名。

A. Remainder

#include 
using namespace std;
typedef long long ll;
const ll maxn = 2e5 + 100;
ll n, x, y;
char str[maxn];
int main() {
#ifndef ONLINE_JUDGE
    freopen("in", "r", stdin);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n >> x >> y;
    cin >> str + 1;
    ll dis = n - y + 1;
    ll ans = 0;
    for (ll i = n - x + 1; i <= dis - 2; i++) {
        if (str[i] == '1')
            ans++;
    }
    if (str[dis - 1] == '0')
        ans++;
    for (ll i = dis; i <= n; i++) {
        if (str[i] == '1')
            ans++;
    }
    printf("%lld\n", ans);
    return 0;
}

B. Polycarp Training

#include
using namespace std;
const int maxn = 2e5+10;
int x[maxn];
int main()
{
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int n;
	scanf("%d",&n);
	for(int i = 0;i < n; i++)
		scanf("%d",&x[i]);
	sort(x,x + n);
	int i = 0,k = 0;
	while(i < n)
	{
		if(x[i] >= k+1)
			k++;
		i++;
	}
	printf("%d\n",k);
	return 0;
}

C. Good String

#include
using namespace std;
int main() {
    int n;
    char s[200005];
    char t[200005];
    scanf("%d", &n);
    scanf("\n");
    cin >> s;
    int len = 0;
    for (int i = 0; i < n - 1; i += 2) {
        if (s[i] != s[i + 1]) {
            t[len] = s[i];
            len++;
            t[len] = s[i + 1];
            len++;
        } else {
            for (int j = i; i < n; i++) {
                if (s[j] != s[i]) {
                    t[len] = s[j];
                    len++;
                    t[len] = s[i];
                    len++;
                    i -= 2;
                    i++;
                    break;
                }
            }
        }
    }
    if (len == 0)
        cout << n << "\n" << "\n";
    else
        cout << n - len << "\n" << t << "\n";
    return 0;
}

D. Almost All Divisors

#include
using namespace std;
typedef long long ll;
const int maxn = 300+10;
vectorx;
int main()
{
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int T;
	scanf("%d",&T);
	while(T--)
	{
		x.clear();
		int n;
		scanf("%d",&n);
		for(int i = 0;i < n; i++)
		{
			ll k;
			scanf("%lld",&k);
			x.push_back(k);
		}
		sort(x.begin(),x.end());
		ll ans = 1ll * x[0] * x[n-1];
		int flag = 0;
		for(ll i = 0;i < n; i++)
		{
			if(ans % x[i] != 0)
			{
				flag = 1;
				break;
			}
		}
		if(flag)
		{
			printf("-1\n");
			continue;
		}
		int k = 0;
		for(ll i = 2;i < sqrt(ans); i++)
		{
			if(ans % i == 0)
				k += 2;
		}
		if(sqrt(ans) * sqrt(ans) == ans)
			k++;
		if(k != n)
			flag = 1;
		if(flag)
			printf("-1\n");
		else
			printf("%lld\n",ans);
	}
	return 0;
}

E. Two Arrays and Sum of Functions

#include
using namespace std;
typedef long long ll;
const int maxn = 2e5+10;
const int mod = 998244353;
ll x[maxn],y[maxn];
bool cmp(int a,int b)
{
	return a > b;
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i = 0;i < n; i++)
	{
		scanf("%lld",&x[i]);
		x[i] *= (i + 1ll) * (n - i);  
	}
	for(int i = 0;i < n; i++)
		scanf("%lld",&y[i]);
	sort(x,x + n);
	sort(y,y + n,cmp);
	ll ans = 0;
	for(int i = 0;i < n; i++)
		ans = (x[i] % mod * y[i] % mod + ans) % mod;
	cout << ans << endl;
	return 0;
}

 

你可能感兴趣的:(CF,比赛题解)