链接:http://codeforces.com/contest/1221
A. 2048 Game
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
#define speed std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
using namespace std;
typedef long long ll;
queue<ll> q;
stack<ll> s;
deque<ll> deq;
priority_queue<ll> pq;
const ll maxn = 2050;
ll n,m,l,r;
ll ans=0;
int main()
{
ll T;
cin>>T;
while(T--){
ll a[maxn],b[maxn];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i];
if(a[i]>2048)
continue;
else{
b[a[i]]++;
}
}
for(ll i=1;i<2048;i*=2){
ll num=b[i]/2;
b[i*2]+=num;
}
if(b[2048]>=1){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
}
B. Knights
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
#define speed std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
using namespace std;
typedef long long ll;
queue<ll> q;
stack<ll> s;
deque<ll> deq;
priority_queue<ll> pq;
const ll maxn = 200005;
ll n,m,l,r;
ll ans=0;
ll a[maxn];
char str[101][101];
int main()
{
cin>>n;
for(ll i=0;i<n;i++){
for(ll j=0;j<n;j++){
if((i+j)%2==0){
cout<<"W";
}
else{
cout<<"B";
}
}
cout<<"\n";
}
}
C. Perfect Team
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f
#define lowbit(a) ((a)&-(a))
#define speed std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
using namespace std;
typedef long long ll;
queue<ll> q;
stack<ll> s;
deque<ll> deq;
priority_queue<ll> pq;
const ll maxn = 200005;
ll n,m,l,r,k;
ll ans;
ll a[maxn];
int main()
{
ll T;
cin>>T;
while(T--){
cin>>n>>m>>k;
ll minn=min(n,m);
ll maxx=max(n,m);
ll tmp=maxx-minn;
l=0,r=minn;
while(l<=r){
ll mid=(l+r)/2;
if(tmp+k+mid*2<minn-mid){
l=mid+1;
}
else{
r=mid-1,ans=mid;
}
//cout<
//cout<
}
//cout<
//-cout<
cout<<minn-ans<<endl;
}
}
D. Make The Fence Great Again
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 1e18+5 //这个很重要,要看清题目要求
#define lowbit(a) ((a)&-(a))
#define speed std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
using namespace std;
typedef long long ll;
queue<ll> q;
stack<ll> s;
deque<ll> deq;
priority_queue<ll> pq;
const ll maxn = 300005;
ll n,m,l,r;
ll ans=0;
ll a[maxn],b[maxn];
ll dp[maxn][3];
int main()
{
speed; //你妈的这道题目还卡cin输入时间
ll T;
cin>>T;
while(T--){
cin>>n;
for(ll i=0;i<=n;i++){
for(ll j=0;j<3;j++)
dp[i][j]=INF;
}
for(ll i=1;i<=n;i++){
cin>>a[i]>>b[i];
} // 我们用dp[i][j]表示第i个数字加了j次使得第i个数字之前的所有数字不矛盾的最小花费
dp[0][0]=0ll;
for(ll i=1;i<=n;i++){
for(ll j=0;j<3;j++){
for(ll k=0;k<3;k++){
if(a[i]+j!=a[i-1]+k) //当这一个+j与上一个+k不相等时进行比较
dp[i][j]=min(dp[i][j],dp[i-1][k]+j*b[i]);
}
}
}
cout<<min(dp[n][0],min(dp[n][1],dp[n][2]))<<"\n";
}
return 0;
}