当前位置:编程学习 > C/C++ >>

130331周赛

A. Roma and Changing Signs
此题最希望的是能把所有的负数都变成正数,当负数个数>=操作数,由小到大变正;当负数个数<操作数时,剩下的操作数只对最小的操作。


[cpp] 
#include <iostream>  
#include <cstdio>  
#include <cmath>  
#include <algorithm>  
using namespace std; 
 
int n,k; 
int a[100005]; 
 
int main() 

    int i,j; 
    while(cin >> n >> k) 
    { 
        int cnt = 0; 
        for(i=0; i<n; i++) 
        { 
            scanf("%d",&a[i]); 
            if(a[i] < 0) 
                cnt ++; 
        } 
        if(cnt >= k) 
        { 
            for(i=0; i<k; i++) 
                a[i] = -a[i]; 
        } 
        int t = 0; 
        if(cnt < k) 
        { 
            for(i=0; i<cnt; i++) 
                a[i] = -a[i]; 
            t = (k - cnt) % 2; 
            sort(a,a+n); 
            if(t == 1) 
                a[0] = -a[0]; 
        } 
        long long sum = 0; 
        for(i=0; i<n; i++) 
            sum += a[i]; 
        cout << sum << endl; 
    } 
    return 0; 

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int n,k;
int a[100005];

int main()
{
    int i,j;
    while(cin >> n >> k)
    {
        int cnt = 0;
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            if(a[i] < 0)
                cnt ++;
        }
        if(cnt >= k)
        {
            for(i=0; i<k; i++)
                a[i] = -a[i];
        }
        int t = 0;
        if(cnt < k)
        {
            for(i=0; i<cnt; i++)
                a[i] = -a[i];
            t = (k - cnt) % 2;
            sort(a,a+n);
            if(t == 1)
                a[0] = -a[0];
        }
        long long sum = 0;
        for(i=0; i<n; i++)
            sum += a[i];
        cout << sum << endl;
    }
    return 0;
}

 

B. Maxim and Discounts
活动有几种,买n送2,贪心的角度,选择n最小的。因为送的两件商品价格必须低于买的n件,所以将商品从大到小排序。


[cpp] 
#include <iostream>  
#include <cstdio>  
#include <cmath>  
#include <algorithm>  
#include <cstring>  
using namespace std; 
int n,m; 
int a[100005],q[100005]; 
 
bool cmp(int a,int b) 

    return a > b; 

int main() 

    int i,j; 
    while(cin >> m) 
    { 
        int minm = 100000000; 
        for(i=0; i<m; i++) 
        { 
            scanf("%d",&q[i]); 
            if(minm > q[i]) 
                minm = q[i]; 
        } 
        cin >> n; 
        for(i=0; i<n; i++) 
            scanf("%d",&a[i]); 
        sort(a,a+n,cmp); 
 
        int sum = 0,cnt = minm,tmp = 0; 
        for(int i=0; i<n; i++) 
        { 
            if(tmp > 0) 
            { 
                tmp --; 
                cnt = minm; 
                continue; 
            } 
            cnt --; 
     &nbs

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,