Codeforces Round #365 (Div. 2)

第一題:水的不能再水了,小學生都會。。。

第二題:給你n個城市,k個省市,每個城市和它序號相鄰的城市相連,例如當n==3時,1-2-3-1,當城市爲省市時,省市會和其他的城市都有一條邊直接相連,求所有城市的邊的權重和。

Examples
input
4 1
2 3 1 2
3
output
17
input
5 2
3 5 2 2 4
1 4
output
71
Note

This image describes first sample case:

It is easy to see that summary price is equal to 17.

This image describes second sample case:

一開始用O(N^2),TLE,一直想不出怎麼降時間複雜度,總覺得至少都要算n*k次的啊(秀智商了),看題解,尼瑪,有規律的(小學生都會),

先預處理總和ans,每一條邊和其他邊相連的權重和爲S=(ans-a[i])*a[i],如果有多個省市,那麼需要減去這些省市之間的重複計算,

S=(ans-res)*a[i];    res計算已經就算過的省市權重和

當然最後還要遍歷一遍相鄰城市之間的權重是否計算了,我是用F[N][2]來計算每個節點相鄰節點是否計算,同樣也可以用一維來記錄;

唉,反正這題真的是秀智商了,渣渣渣~~~難過

--------------------------------------------------------------------------------------------------------

敲代碼中一些問題:

1.剛開始由於LL,int混用,導致到大數據就會出錯,雖然不知道爲什麼,但是以後記住不要LL,int 混用

2.忘記自己F數組只是開到【2】,然而一直寫的都是記錄兩個節點,唉,調試了好久,後來才發現,,改爲前節點記錄爲f[i][0],後節點記錄爲f[i][1]

----------------------------------------------------------------------------------------------------------

一道大水題弄了一早上,羞恥~~~

#include <iostream>
#include <cassert>
#include <algorithm>
#include <vector>
#include <cstring>
#include <iterator>
using namespace std;
typedef long long ll;
#define N 100100
int n,k;
ll sum,ans,res;
int b[N],a[N];
bool f[N][2];
//bool f[N][N];
int main() {
#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
#endif

	while(~scanf("%d%d",&n,&k)) {
		memset(f,0,sizeof(f));
		int x;
		sum=0;
		ans=0;
		res=0;
		for(int i=0; i<n; i++) scanf("%d",&a[i]);
		for(int i=0; i<n; i++) {
			ans+=a[i];
			//f[i][(i+1)%n]=f[(i+1)%n][i]=true;
			//cout<<sum<<endl;
		}
		for(int i=0; i<k; i++) {
			scanf("%d",&b[i]);
			b[i]=b[i]-1;
			res+=a[b[i]];
			sum+=(ans-res)*a[b[i]];
			int x=(b[i]+1)%n,y=b[i]==0?n-1:(b[i]-1);
			
			f[b[i]][0]=f[b[i]][1]=1;
			f[x][1]=f[y][0]=1;

		}
		for(int i=0; i<n; i++) {
			int x=(i+1)%n,y=(i==0?n-1:(i-1));

			if(!f[i][0]||!f[x][1])  {
				sum+=a[i]*a[x];
				f[i][0]=f[x][1]=1;

			}
			if(!f[i][1]||!f[y][0]) {
				sum+=a[i]*a[y];
				f[i][1]=f[y][0]=1;

			}
		}
		printf("%I64d\n",sum);

	}
	return 0;
}



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