Educational Codeforces Round 98 (Rated for Div. 2) A-D题解
A
如果x和y差值小于等于1就直接输出x+y,否则最少需要走abs(x-y)-1步到达x和y差值小于等于1的位置。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define PI acos(-1)
const int maxn = 2e5+5;
const ll mod = 1e9+9;
const double eps = 1e-6L;
int a[maxn],sum[maxn];
int main()
{
int T=1;
scanf("%d",&T);
while(T--)
{
int x,y;
scanf("%d %d",&x,&y);
if(abs(x-y)<=1)
printf("%d\n",x+y);
else
{
printf("%d\n",x+y+abs(x-y)-1);
}
}
return 0;
}
B
求平均数,得向上取整,平均数是⌈sum/(n-1)⌉,然后和序列中最大值作比较,这就是你最后分配完每个数的值,这种情况下肯定最小,然后求差值,就是答案。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define PI acos(-1)
const int maxn = 2e5+5;
const ll mod = 1e9+9;
const double eps = 1e-6L;
ll a[maxn];
int main()
{
int T=1;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
ll sum=0;
ll maxx=-1;
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
sum += a[i];
maxx = max(maxx,a[i]);
}
ll avg = sum/(n-1);
if(sum%(n-1)!=0) avg++;
if(avg>=maxx)
{
if(sum%(n-1)!=0)
printf("%lld\n",abs(n-1-sum%(n-1)));
else
puts("0");
}
else
{
if(sum%(n-1)!=0)
printf("%lld\n",abs(n-1-sum%(n-1))+(maxx-avg)*(n-1));
else
printf("%lld\n",(maxx-avg)*(n-1));
}
}
return 0;
}
C
简单的括号匹配
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define PI acos(-1)
const int maxn = 2e5+5;
const ll mod = 1e9+9;
const double eps = 1e-6L;
char s[maxn];
int main()
{
int T=1;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
stack<char>s1;
stack<char>s2;
int len = strlen(s);
int ans = 0;
for(int i=0;i<len;i++)
{
if(s[i]=='(') s1.push('(');
else if(s[i]=='[') s2.push('[');
else if(s[i]==')')
{
if(!s1.empty())
{
s1.pop();
ans++;
}
}
else if(s[i]==']')
{
if(!s2.empty())
{
s2.pop();
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}
D
找规律:分子就是斐波那契数列,分母则为 2 的 n 次方
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define PI acos(-1)
const int maxn = 2e5+5;
const ll mod = 998244353;
const double eps = 1e-6L;
ll qpow(ll a,ll n)//快速幂
{
ll sum = 1;
while(n)
{
if(n & 1)
sum = sum*a%mod;
n >>= 1;
a = a*a%mod;
}
return sum % mod;
}
ll f[maxn];
int main()
{
int T=1;
// scanf("%d",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
ll y = qpow(2,n);
y = qpow(y,mod-2);
f[1]=y%mod,f[2]=y%mod,f[3]=(2*y)%mod;
for(ll i=4;i<=n;i++)
f[i] = (f[i-1]+f[i-2])%mod;
// ll ans = (f[n]*y)%mod;
printf("%lld\n",f[n]);
}
return 0;
}