Atcoder AGC013 簡要題解
Sorted Arrays
貪心到前面第一個非法位置轉移。
#include <bits/stdc++.h>
using namespace std;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=1e5+50;
int n,a[N],p[N][2],f[N];
int main() {
n=rd();
for(int i=1;i<=n;i++) a[i]=rd();
for(int i=1;i<=n;i++) {
p[i][0]=p[i-1][0];
p[i] [1]=p[i-1][1];
if(a[i]>a[i-1]) p[i][1]=i-1;
if(a[i]<a[i-1]) p[i][0]=i-1;
f[i]=f[min(p[i][0],p[i][1])]+1;
} cout<<f[n]<<'\n';
}
Hamiltonish Path
隨便放一條邊在雙端佇列中,然後不斷向兩邊擴充套件。
#include <bits/stdc++.h>
using namespace std;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-')f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=2e5+50;
int n,m,inq[N];
vector <int> edge[N];
deque <int> q;
inline void F(int x) {q.push_front(x); inq[x]=1;}
inline void T(int x) {q.push_back(x); inq[x]=1;}
inline bool CF(int x) {
for(auto v:edge[x]) if(!inq[v]) {F(v); return true;}
return false;
}
inline bool CT(int x) {
for(auto v:edge[x]) if(!inq[v]) {T(v); return true;}
return false;
}
int main() {
n=rd(), m=rd();
for(int i=1;i<=m;i++) {
int x=rd(), y=rd();
edge[x].push_back(y);
edge[y].push_back(x);
}
for(int i=1;i<=n;i++) if(edge[i].size()) {F(i), T(edge[i].front()); break;}
while(CF(q.front())); while(CT(q.back()));
printf("%d\n",q.size());
for(auto v:q) printf("%d ",v);
}
Ants on a Circle
最後螞蟻的位置是確定的,彼此的順序也是確定的。 每次有螞蟻經過處排名會整體移動1。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=1e5+50;
int n,cnt,L,T,a[N],b[N],w[N];
int main() {
n=rd(), L=rd(), T=rd();
for(int i=1;i<=n;i++) {
a[i]=rd(), w[i]=(rd()==1 ? 1 : -1);
b[i]=((a[i]+(LL)T*w[i])%L+L)%L;
int dis=(w[i]>0 ? L-a[i] : a[i])+1;
if(T>=dis) {
cnt+=w[i]; int res=T-dis;
cnt+=(res/L)*w[i];
cnt=(cnt%n+n)%n;
}
} sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
printf("%d\n",b[(i+cnt-1)%n+1]);
}
Piling Up
考慮任意一個序列,他非法一定存在某個位置的字首超過了範圍。
那麼DP的時候記錄一下是否卡住過範圍,就可以不重不漏了。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch-'0'; ch=nc();}
return i*f;
}
const int N=3e3+50, mod=1e9+7;
inline void add(int &x,int y) {x=(x+y>=mod) ? (x+y-mod) : (x+y);}
int n,m,f[N][N][2];
int main() {
n=rd(), m=rd();
for(int i=0;i<=n;i++) f[0][i][i==0]=1;
for(int i=1;i<=m;i++) {
for(int j=0;j<=n;++j) {
if(j) add(f[i][j][j==1],f[i-1][j][0]), add(f[i][j][1],f[i-1][j][1]);
if(j) add(f[i][j-1][j==1],f[i-1][j][0]), add(f[i][j-1][1],f[i-1][j][1]);
if(n-j) add(f[i][j][0],f[i-1][j][0]), add(f[i][j][1],f[i-1][j][1]);
if(n-j) add(f[i][j+1][0],f[i-1][j][0]), add(f[i][j+1][1],f[i-1][j][1]);
}
}
int ans=0;
for(int i=0;i<=n;i++) add(ans,f[m][i][1]);
cout<<ans<<'\n';
}
Placing Squares
把問題轉化為一個正方形裡面可以放兩個點,總共的方案數。
矩陣快速冪即可。
#include <bits/stdc++.h>
using namespace std;
#define rep(i,x,y) for(int i=x;i<=y;i++)
const int RLEN=1<<18|1;
inline char nc() {
static char ibuf[RLEN],*ib,*ob;
(ib==ob) && (ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
return (ib==ob) ? -1 : *ib++;
}
inline int rd() {
char ch=nc(); int i=0,f=1;
while(!isdigit(ch)) {if(ch=='-')f=-1; ch=nc();}
while(isdigit(ch)) {i=(i<<1)+(i<<3)+ch
相關推薦
Atcoder AGC013 簡要題解
傳送門
Sorted Arrays
貪心到前面第一個非法位置轉移。
#include <bits/stdc++.h>
using namespace std;
const int RLEN=1<<18|1;
inline char n
Atcoder AGC018 簡要題解
傳送門
Coins
先轉化為一個點只有兩種屬性
x
i
Atcoder AGC017 簡要題解
傳送門
Snuke and Spells
答案等於
n
n
n條線段
Atcoder AGC016 簡要題解
傳送門
+/- Rectangle
對於
(
x
,
Atcoder Yahoo Programming Contest 2019 簡要題解
ram yahoo 轉移 first put 表示 spa rec sub A-C
直接放代碼吧。
A
int n,k;
int main()
{
n=read();k=read();
puts(k<=(n+1)/2?"YES":"
AtCoder Grand Contest 031 簡要題解
isp href uil 出現 mat false tor 每次 spa AtCoder Grand Contest 031
Atcoder
A - Colorful Subsequence
description
求\(s\)中本質不同子序列的個數模\(10^9+7\)。
AGC002 簡要題解
傳遞 auto begin ati bit 檢查 code cin int A
分情況討論一下。。。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
scanf
Codeforces Round #498 (Div. 3) 簡要題解
復雜 2個 problem val 要求 scan ces 結構 fine [比賽鏈接]
https://codeforces.com/contest/1006
[題解]
Problem A. Adjacent Replacements
模擬賽簡要題解與心得
子集 約數 lib 紀念 機會 分享圖片 printf 關心 stdin 目錄
模擬賽簡要題解與心得
T1 方格紙與直線
題解
T2 探險
題解
3.蘋果樹
題解
心得
模擬賽簡要題解與心得
最近我的心態炸了,寫此博客紀念調侃一下.
T1 方格紙與直線
【題目描述】
【AtCoder】ARC100 題解
cut swa std while 處理 方式 累加 endif matrix C - Linear Approximation
找出\(A_i - i\)的中位數作為\(b\)即可
題解
#include <iostream>
#include <cst
【AtCoder】ARC099題解
C - Minimization
每次操作必然包含一個1 列舉第一次操作的位置計算兩邊即可
程式碼
#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#def
JXOI 2018 簡要題解
pro 編號 memset fin def bug esp names isdigit 「JXOI2018」遊戲
題意
可憐公司有 \(n\) 個辦公室,辦公室編號是 \(l\sim l+n-1\) ,可憐會事先制定一個順序,按照這個順序依次檢查辦公室。一開始的時候,所有辦
Tsinghua 2018 DSA PA2簡要題解
反正沒時間寫,先把簡要題解(嘴巴A題)都給他寫了記錄一下。
CST2018 2-1 Meteorites:
乘法版的石子合併,堆 + 高精度。
寫起來有點煩貌似。
CST2018 2-2 Circuit
首先是一個二進位制trie + 貪心,但是由於有間隔
SCOI2016 Day1 簡要題解
目錄
「SCOI2016」背單詞
題意
題解
程式碼
「SCOI2016」幸運數字
題意
題解
總結
程式碼
「SCOI2016」萌萌噠
題意
題解
總結
程式碼
[題解][Codeforces 1080A~1080F]Codeforces Round #524 簡要題解
引入
人生第一次 CF
也是難得的一次時間在下午的比賽
在讀題上浪費了好多時間,藥丸
因為不熟悉賽制, D 題不檢查就提交
結果 WA 了兩發
題目
洛谷 RemoteJudge
A
B
C
D
E
簡要題解-圖論-搜尋-並查集-dp-樹形-拓撲-tarjan等等
attentions:對我而言非常好的一道題!最長路!
有幾個點
1、這道題轉化成最長路來求解,方法和最短路類似
2、但這道題是點有正權且只有負權邊,且路徑為單向!那麼精妙之處在於,可以將點權轉化為邊權!!!
3、由於題目中可能出現正環(和最短路相反
Codeforces Round #511 (Div. 1) 簡要題解
傳送門
Enlarge GCD
對於所有質數分開考慮,刪除質數的指數最小的那幾個數。
#include <bits/stdc++.h>
using namespace std;
const
「JOI 2018 Final」簡要題解
題目是LOJ2347-LOJ2351
「JOI 2018 Final」寒冬暖爐
貪心小水題。選最大的間隔即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n
Tsinghua 2018 DSA PA3簡要題解
CST2018 3-1-1 Sum (15%)
簡單的線段樹,單點修改,區間求和。
很簡單。
CST2018 3-1-2 Max (20%)
高階的線段樹。
維護區間最大和,區間和,左邊最大和,右邊最大和。
單點修改的時候一路吧區間都改了就好了。
求子段最大值也就判斷一下左右就好
JXOI 2017 簡要題解
題意
九條可憐手上有一個長度為 \(n\) 的整數數列 \(r_i\) ,她現在想要構造一個長度為 \(n\) 的,滿足如下條件的整數數列 \(A\) :
\(1\leq A_i \leq r_i\) 。
對於任意 \(3 \leq i \leq n\) ,令 \(R\) 為 \(A_1\) 至 \(A_