Mishka and trip(CF #365 Div. 2)

這道題看起來不難,實際上也不難,不過因爲一個數據範圍大小的問題,讓我WA了三次,全部倒在test 11(眼睛不好~~~,慘痛的教訓)。

題目大意:某個地方有 n 個城市,編號從 1 到 n,其中有 k 個都城,普通城市 i 和 i+1 及 i-1有道路相通,都城和所有城市都有道路相通。每個城市有自己的一個魅力值,城市之間的路費等於相連兩個城市的魅力值乘積,求總的路費爲多少。附鏈接:http://codeforces.com/problemset/problem/703/B

大體思路:輸入n個城市和k個都城,先計算出相鄰的城市總路費再加上都城和普通城市的路費,注意道路重複問題,以及城市1和城市n的相鄰城市的處理,還有,就是數據範圍,用long long~~~~~~

以下是ac代碼:

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100005;
long long city[maxn];
int vis[maxn];   //標記都城
int main(){
    memset(vis,0,sizeof(vis));
    int n,k;
    cin>>n>>k;
    long long sum=0;
    for(int i=0;i<n;i++){
        cin>>city[i];
        sum+=city[i];
    }
    long long result=0;
    for(int i=0;i<n-1;i++)
        result+=city[i]*city[i+1];
    result+=city[n-1]*city[0];
    //cout<<result<<endl;
    int id;
    for(int i=0;i<k;i++){
        cin>>id;
        --id;
        int sum1=sum;
        int left=(id-1+n)%n;
        int right=(id+1)%n;
        if(!vis[left])
            sum1-=city[left];
        if(!vis[right])
            sum1-=city[right];
        sum1-=city[id];
        result+=sum1*city[id];
        sum-=city[id];
        vis[id]=1;
    }
    cout<<result<<endl;
    return 0;
}


發佈了39 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章