2019 icpc 上海網路賽

2021-09-27 06:22:40 字數 1651 閱讀 9742

題意:

t組案例,每組案例:n個燈泡( 0 ----   n-1),初始所有燈泡為熄滅狀態,m次操作,每次操作把區間[l,r]內的燈泡翻轉(開變關,關變開),問m次操作之後有多少燈泡是亮著的。

題解:

每次操作對[l,r]的所有數進行+1操作,求最後有多少個奇數。(設該陣列為a[n],每次操作a[l]+1,a[r+1]-1,求字首和sum[i]=sum[i-1]+a[i]即可得到進行區間所有數+1操作後每個數的值sum[i])

方法一:差分,

#includeusing namespace std;

const int maxn=2005;

pairp[maxn];

int main()

sort(p, p+cnt);

int sum = 0, ans = 0;

for(int i = 1; i < cnt; i++)

}printf("case #%d: %d\n", cas, ans);

cas++;

}return 0;

}

方法二:區間,優先佇列

#include #define ll long long

using namespace std;

const int maxn = 1e6 + 5;

const int inf = 0x3f3f3f3f;

const ll mod = 1e9 + 7;

int sum[maxn];

struct node

};priority_queuepq;

int main()

ll ans = 0;

while(pq.size() > 1)

else if(e.l <= e2.l && e2.r < e.r)

else

} if(pq.size() > 0) ans += pq.top().r - pq.top().l + 1;

printf("case #%d: %lld\n", cas, ans);

}return 0;

}

題意:

給出n和b,求1到n,各數在b進製下各位數之和的總和。

題解:

模擬打表

#include using namespace std;

typedef long long ll;

const int maxn = 1e6+10;

int ans[11][maxn];

int fun(int n, int m)

return res;

}int main()

for(int i = 2; i <= 10; i++)

} int t;

scanf("%d", &t);

for(int x = 1; x <= t; x++)

return 0;

}

2019 icpc 上海區域賽

第二次參加,很慘,2道題打鐵,罰時太多了,先寫的 k 題,不過沒寫對,然後以最快的速度完成了 b 題,不夠已經過去了一段時間了 k 題很快從基環發現是二分樹,但是錯了後才發現,如果完全圖過不了,我應該早點測那個樣例,長了教訓,最後暴力過了,雖然看到資料就知道是可以暴力過,但隊友沒那麼寫,還是最後發現...

2019 ICPC 南京網路賽D Robots

link 思路link 題意 給出乙個n個點的dag,起點保證為1,終點保證為n,在每乙個點,每一天有等概率走向其相鄰的點或是停在原點。在第i天的損耗值為i,求走到終點的期望損耗值。思路定義兩個陣列d i c i d i c i d i c i 分別代表第i個位置到終點的期望天數以及期望損耗值。可以...

2019ICPC徐州網路賽

theme n個數編號為1 n,兩種操作 1 x 將編號為x的數置為不可得,2 x 詢問x位置及其後第乙個可得數的編號。1 n,x 1e9,1 q 1e6 solution 首先想到用線段樹維護。初始時線段樹每個l r位置的值為l,1 x操作對應將x位置值置為inf,2 x 操作相當於查詢區間 x,...