程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Codeforces Round #281 (Div. 2)

Codeforces Round #281 (Div. 2)

編輯:C++入門知識

Codeforces Round #281 (Div. 2)


A.模擬題

 

題意為:給出兩個隊伍名home隊和away隊,然後給出n條信息,每條信息包括四個值,在什麼時間,哪個隊,該隊的幾號,得到了黃牌或者紅牌,如果得到了兩個黃牌,那麼自動得到一張紅牌,我們關心的是兩個隊的球員第一次得到紅牌的情況,如果在輸入的時候發現有球員第一次得到了紅牌,那麼就輸出該球員的隊伍名,是幾號,在什麼時候得到了一張紅牌。

得到一張黃牌用1表示,一張紅牌用2表示,用兩個map存放兩個球隊每個球員的犯規情況,如果是2就說明已經得到了一張紅牌。

代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
using namespace std;
#define ll long long

string home,away;
maph;
mapa;

int main()
{
    cin>>home>>away;
    int n;
    cin>>n;
    int time,no;
    char tap,color;
    while(n--)
    {
        cin>>time>>tap>>no>>color;
        if(tap=='a')
        {
            if(a[no]==2)
                continue;
            else
            {
                if(color=='r')
                {
                    a[no]=2;
                    cout<

 

B.模擬題

題目鏈接:http://codeforces.com/contest/493/problem/B

題意為:依次給出n個分數,或者大於0,或者小於等於0,如果大於0代表a的得分,如果小於0,其絕對值代表b的得分,最後誰的總分高,誰就贏,如果總分相同,那麼分數序列中字典序高的人贏,比如a 的分數序列為 15 20 22 而b 的分數序列為 15 24 22,則b的字典序高,因為 15=15,20<24,如果二者的字典序也一樣,分數序列相同,那麼輸入過程中最後一次的輸入是誰的分數,誰就贏。

分情況,if,else

代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
using namespace std;
#define ll long long

const int maxn=200010;
ll a[maxn];
ll b[maxn];
ll suma=0;
ll sumb=0;
int n;
ll score;
int last;

int main()
{
    cin>>n;
    int lena=0;
    int lenb=0;
    for(int i=1;i<=n;i++)
    {
        cin>>score;
        if(score>0)
        {
            a[++lena]=score;
            suma+=score;
        }
        else
        {
            b[++lenb]=-score;
            sumb+=(-score);
        }
        if(i==n)//記錄最後一次是誰的得分
        {
            if(score>0)
                last=1;
            else
                last=2;
        }
    }
    if(suma>sumb)//存在一方比另一方分高的情況
        cout<suma)
        cout<b[i])//判斷誰的字典序大
            {
                flag=1;
                break;
            }
            if(b[i]>a[i])
            {
                flag=2;
                break;
            }
        }
        if(flag==1)
        {
            cout<

 

C.

題目鏈接:http://codeforces.com/contest/493/problem/C

題意為:

a和b距離籃筐一段距離射籃,a射了n次,每次距離為a[i],b射了m次,每次距離為b[i], 給定一個界限d,如果射籃距離小於等於d的得2分,大於d的得3分,求最優的d,使得a的分數與b的分數之差最大化,如果最大化有多種情況,輸出a的分數最高的那一組。 最後輸出a的分數和b的分數。

一開始界限為0,即每個人的每求得分都為3,然後對a[i],b[i]依次從小到大進行排序,然後從小到大以b[i]為d, 計算出中間過程中的 a的總得分,b得總得分,更新最終答案的a的得分,b的得分。

代碼:

#include 
#include 
#include 
using namespace std;
#define ll long long

const int maxn=200002;
int a[maxn];
int b[maxn];
int na,nb;
ll scorea;
ll scoreb;

int main()
{
    cin>>na;
    for(int i=0;i>nb;
    for(int i=0;iscorea))
        {
            scorea=ta;
            scoreb=tb;
        }
    }
    cout<

D.

題目鏈接:http://codeforces.com/contest/493/problem/D

題意為:有n*n的棋盤,白方在左上角(1,1)處,黑方在右上角(1,n)處,二者每一步可以上下左右,對角線走,一方抓到另一方則勝,雙方都采用最優策略,如果黑方勝,輸出black,如果白方勝,先輸出 white,再輸出第一步走到的坐標.

如果n為奇數,那麼白方無論怎麼走,黑方走的都和它對稱,黑方肯定贏,如果n為偶數,那麼白方只要走到 (1,2)這個坐標,就轉換成了n為奇數的情況,白方必勝。

代碼:

#include 
#include 
#include 
using namespace std;
#define ll long long

int main()
{
    int n;
    cin>>n;
    if(n&1)
        cout<

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved