題意:
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,...