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

codeforces_#243 (Div.2)

編輯:C++入門知識

A題,426A,Sereja and Mugs

題目意思:有n-1個小伙伴,n個杯子,裡面分別裝有水,每個小伙伴可以選擇一杯水,問總共加起來會不會超過給的S

解題思路:

這個還要說嗎?

/*************************************************************************
	> File Name: 1.cpp
	> Author: boblee
	> Mail: [email protected] 
	> Created Time: 2014年04月28日 星期一 19時16分09秒
 ************************************************************************/

#include
#include
#include
#include
using namespace std;

const int maxn=100+20;

int mug[maxn];
int n,s;
int main()
{
    while(~scanf("%d%d",&n,&s))
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&mug[i]);
        sort(mug+1,mug+1+n);
        int sum = 0;
    
        int i;
        for(i=1;i s)
                break;
        }

        if(i
B,426B,Sereja and Mirroring

題目意思:給你一個矩陣a,如果是嚴格對稱的,必須是偶對稱,就消去下半部分,問最後剩多少部分

解題思路:

每次就模擬,可以就消去,不可以就退出輸出

/*************************************************************************
	> File Name: 2.cpp
	> Author: boblee
	> Mail: [email protected] 
	> Created Time: 2014年04月28日 星期一 19時35分20秒
 ************************************************************************/

#include
#include
#include
#include
#include
using namespace std;

const int maxn=100+20;

string s[maxn];
char s2[10*maxn];
int n,m;

bool check(int x)
{
    if(x&1)
        return false;
    for(int i=1,j=x;i
C,425A,Sereja and Swaps

題目意思:給n個數,你最多可以交換k次,問最後的最大連續和

解題思路:

因為n很小,可以暴力枚舉,但是枚舉也是有藝術的,我開始完全不知道怎麼枚舉。

就是枚舉區間,然後只能用區間外的去交換區間裡面的,最後找出最大的那一個

/*************************************************************************
	> File Name: 3.cpp
	> Author: boblee
	> Mail: [email protected] 
	> Created Time: 2014年04月28日 星期一 20時59分51秒
 ************************************************************************/

#include
#include
#include
#include
#include
using namespace std;

const int maxn=200+20;
int a[maxn];
int sum[maxn];
bool vis[maxn];
int n,k;
const int INF = 0X3F3F3F3F;

int cal(int l,int r)
{
    priority_queue,greater > q;
    int ret = 0;
    memset(vis,false,sizeof(vis));
    for(int i=l;i<=r;i++)
    {
        ret += a[i];
        q.push(a[i]);
    }

    int ktmp = k;
    while(ktmp > 0)
    {
        int maxt = -INF;
        int maxv;
        for(int i=1;i<=n;i++)
        {
            if((i>=l && i<=r) || vis[i]) continue;
            if(a[i] > maxt)
            {
                maxt = a[i];
                maxv = i;
            }
        }

        if(maxt > q.top())
        {
            ret = ret-q.top()+maxt;
            vis[maxv] = true;
            q.pop();
            q.push(maxt);
        }
        ktmp--;
    }
    return ret;
}

int main()
{
    while(~scanf("%d%d",&n,&k))
    {
        memset(sum,0,sizeof(sum)); 
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum[i] = sum[i-1]+a[i];
        }
        
        int ans = -INF;
        for(int i=1;i<=n;i++)
        {
            for(int j=i;j<=n;j++)
            {
                int tmp = cal(i,j);
                if(tmp > ans)
                    ans = tmp;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}







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