Educational Codeforces Round 171 (Div. 2)
A
猜結論,兩條邊的最小值最大時,兩條邊相等。所以取 \(min(x,y)\) 為邊長的正方形,對角線就是所求。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int x,y,k;
void solve()
{
cin>>x>>y>>k;
int t=min(x,y);
cout<<0<<' '<<0<<' '<<t<<' '<<t<<'\n';
cout<<0<<' '<<t<<' '<<t<<' '<<0<<'\n';
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
int T;
cin>>T;
while(T--) solve();
return 0;
}
B
賽時罰時吃爽了 qwq。
首先若 \(n\) 為偶數,必須是兩兩匹配塗黑的,不能有列表外的被塗黑。塗 \((1,2)\),\((3,4)\),\((5,6)\) 等等。在這些的差值取最大就是 \(k\)。
若 \(n\) 為奇數,那麼就是能且必須有一個數不是和列表中的數匹配塗黑,列舉這個數 \(i\),將陣列分為兩部分 \((1,i-1)\) 和 \((i+1,n)\),和 \(n\) 為偶數的情況一樣考慮兩部分。\(O(n^2)\) 複雜度完全可以。
一開始認為奇數情況下只能讓開頭和末尾的和其他的數塗黑 qwq。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=2005;
const ll inf=1e18;
int n;
ll a[N];
void solve()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
ll ans=inf;
if(n&1)
{
ll ans=inf;
for(int i=1;i<=n;i+=2)
{
ll mx=0;
for(int j=1;j<i;j+=2) mx=max(mx,a[j+1]-a[j]);
for(int j=i+1;j<=n;j+=2) mx=max(mx,a[j+1]-a[j]);
ans=min(ans,mx);
}
cout<<max(1ll,ans)<<'\n';
}
else
{
ll mx=0;
for(int i=2;i<=n;i+=2) mx=max(mx,a[i]-a[i-1]);
cout<<mx<<'\n';
}
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
int T;
cin>>T;
while(T--) solve();
return 0;
}
C
首先肯定要貪心考慮,儘可能優惠後面的商品,儘可能多的優惠。
等於 \(0\) 的商品肯定不能優惠,因為可以有更優的選擇。
將 \(0\) 和 \(1\) 分開,用雙端佇列存 \(1\) 的位置,每次取隊尾,然後肯定是有 \(0\) 就用 \(0\) 的位置出現的商品和當前的拼起來優惠,否則取隊首的 \(1\)。如果都沒有的話就不能優惠。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
typedef long long ll;
const int N=4e5+5;
int n;
string s;
deque<int> dq;
int st[N],tot;
ll ans;
void solve()
{
cin>>n;
cin>>s;
tot=ans=0;
for(int i=0;i<n;i++)
{
if(s[i]-'0') dq.push_back(i+1);
else st[++tot]=i+1;
ans+=i+1;
}
while(dq.size())
{
int x=dq.back();dq.pop_back();
while(tot&&st[tot]>x) tot--;
if(tot)
{
tot--;
ans-=x;
}
else
{
if(dq.size())
{
dq.pop_front();
ans-=x;
}
}
}
cout<<ans<<'\n';
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
int T;
cin>>T;
while(T--) solve();
return 0;
}
D
shi 一樣的數學題,還沒調出來。