2020 11 19 刷題記錄

2022-07-09 06:09:12 字數 4610 閱讀 5341

題意:給出乙個圖,求從任一位置射入光束後光束存在的最長時間與射入方向。若存在多種時間相同的,輸出字典序最小的方案。

題解:比較water的大模擬,題意看對很快能想出來

code

#includeusing namespace std;

#define re register

#define ll long long

#define db double

#define il inline

#define for(x,a,b) for(re int x=a;x<=b;x++)

#define for2(x,a,b) for(re int x=a;x>=b;x--)

#define lfor(x,a,b) for(re ll x=a;x<=b;x++)

#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)

#define abs(x) ((x>0)? x:-x)

#define inf 100000000

#define pii pair#define fi first

#define se second

#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))

int gi()

ll gl()

char mp[4]=;

int n,m,a[505][505];

bool mrk[505][505][4][4];

int time,ans[10];

int solve(pii pos,pii d)

void init()

int main()

pii ray;

cin>>ray.fi>>ray.se;

init();

ans[0]=solve(ray,pii(-1,0));

init();

ans[1]=solve(ray,pii(1,0));

init();

ans[2]=solve(ray,pii(0,-1));

init();

ans[3]=solve(ray,pii(0,1));

int ind=-1;

for(i,0,3) if(ind-1 || ans[ind]=inf) cout<

題意:有兩個數x,y,進行n次操作,對於第i次,有如下兩種操作型別可任選一:

1. x+=a[i],y-=b[i]

2. x-=c[i],y+=d[i]

求最終可以得到的\(x*y\)的最大值

題解:送分題。。。直接列舉\(2^n\)種方案,記錄個最大值就行。然後記得開long long。

code

#includeusing namespace std;

#define re register

#define ll long long

#define db double

#define il inline

#define for(x,a,b) for(re int x=a;x<=b;x++)

#define for2(x,a,b) for(re int x=a;x>=b;x--)

#define lfor(x,a,b) for(re ll x=a;x<=b;x++)

#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)

#define abs(x) ((x>0)? x:-x)

#define inf 1000000000009

#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))

int gi()

ll gl()

int n,a[20],b[20],c[20],d[20];

ll ans,x,y;

void dfs(int pos)

ll t1=x,t2=y;

x+=a[pos],y=max((ll)0,y-b[pos]);

dfs(pos+1);

x=t1,y=t2;

y+=c[pos],x=max((ll)0,x-d[pos]);

dfs(pos+1);

x=t1,y=t2;

}int main()

題意:有乙個\(n*m\)的黑白方格圖,每次詢問其中子矩形內部的黑色連通塊個數,保證任意兩個聯通的黑格間僅有一條路徑

題解:由上面加粗的部分,我們可以知道此圖能構造出一張dag,那麼聯通塊=點數-邊數

二位字首和維護一下點數和邊數即可。注意每次詢問考慮的是矩形內部的連通塊。

code

#includeusing namespace std;

#define re register

#define ll long long

#define db double

#define il inline

#define for(x,a,b) for(re int x=a;x<=b;x++)

#define for2(x,a,b) for(re int x=a;x>=b;x--)

#define lfor(x,a,b) for(re ll x=a;x<=b;x++)

#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)

#define abs(x) ((x>0)? x:-x)

#define inf 1000000000009

#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))

int gi()

ll gl()

int n,m,q;

int pre_p[2005][2005],pre_e[2005][2005];

int pa[2005][2005],pb[2005][2005];

char s[2005][2005];

int main()

// printf("%d\n",pre_e[3][3]);

re int np,ne,x,y,xx,yy;

for(i,1,q)

return 0;}/*

5 5 6

11010

01110

10101

11101

01010

1 1 5 5

1 2 4 5

2 3 3 4

3 3 3 3

3 1 3 5

1 1 3 4

3 4 4

1101

0110

1101

1 1 3 4

1 1 3 1

2 2 3 4

1 2 2 4

*/

題意:(偷懶)

題解:進行仔細的長時間的分析研究(霧),發現我們要求的是逆序對數,但瞄一眼空間限制,32mb,在mle的面前我選擇妥協。

繼續思考,發現a很小,於是從a入手,發現\(x_i\)構成乙個等差數列,於是只要算小於a的逆序對數,剩餘的可直接遞推計算出來。

code

#includeusing namespace std;

#define re register

#define ll long long

#define db double

#define il inline

#define for(x,a,b) for(re int x=a;x<=b;x++)

#define for2(x,a,b) for(re int x=a;x>=b;x--)

#define lfor(x,a,b) for(re ll x=a;x<=b;x++)

#define lfor2(x,a,b) for(re ll x=a;x>=b;x--)

#define abs(x) ((x>0)? x:-x)

#define inf 1000000000009

#define mabs(x) ((abs(x))==(0)? (inf):(abs(x)))

int gi()

ll gl()

int n,x,a,mod;

int tr[500005];

int flag,pls,cut;

ll ans;

int lowbit(int x)

void change(int x)

int ask(int x)

int main()

{ freopen("fly.in","r",stdin);

freopen("fly.out","w",stdout);

n=gi(),x=gi(),a=gi(),mod=gi();

if(x

OI刷題記錄

2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...

面試刷題記錄

寫一段 判斷乙個包括 的表示式是否合法 注意看樣例的合法規則。給定乙個表示式a,請返回乙個bool值,代表它是否合法。測試樣例 a b 5 4 返回 true 測試樣例 a b 5 4 返回 false include vector include iostream using namespace ...

刷題記錄 2015 11 14

現在每天做的題都記錄一下,免得不知道自己在幹什麼。poj2406 用next陣列的定義求迴圈節 poj3261 字尾陣列 題 spoj705 同上,這題我wa了幾次,結果發現 我以為字串只有大寫字母,其實有小寫。如下 poj2406 author duyixian date 2015 11 14 1...