Educational Codeforces Round 73 (Rated for Div. 2)

链接: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;
} 

你可能感兴趣的:(cf)