- 前言
- A.
- CODE
- B.
- CODE
- C.
- CODE
- E.
- CODE
- 补题问题
这场出的很好,满满的罚座QAQ
传送门 :
没看范围,T了一发 (感觉笑了
先判断两个数 他们的 w s ( x ) + p ws(x)+p ws(x)+p 也就是位数和 p p p 的和的长度
如果能直接比 那么就输出
否则只剩下 = = == ==的情况
对于等于的情况,我们只需要让,这两个数乘上较少的 m i n ( p 1 , p 2 ) min(p1,p2) min(p1,p2) 直接比大小就行
没仔细想过,就感觉不会T,直接交了,希望不要被hack
CODEvoid solve() { ll x1,p1; ll x2,p2; cin>>x1>>p1; cin>>x2>>p2; int wsx1 = getws(x1); //自己写的获得位数的函数 int wsx2 = getws(x2); if(p1+wsx1>p2+wsx2) { cout<<">"<x2) cout<<">"< B. 一开始的想法,直接排序 然后 对于 n 2 frac{n}{2} 2n 我们每次都输出 ( s [ i ] , s [ 1 ] ) (s[i],s[1]) (s[i],s[1])
一猜这个结论,过了hh
其实简单的证明一下也是可以的
因为一个数的模,不会比这个数大,因此从大到小排序之后,就没有比小的更小了,直接
输出即可
CODEvoid solve() { ll n,h; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); for(int i=2;i<=n/2+1;i++) { cout< C.摆明是二分答案
而且是很常见的二分答案 和 最基础的那个 分木头 这个题差不多
(因为里面一个+1,让我调了好久
CODEbool check(ll k) { ll sum = 0 ; for(int i=2;i<=n;i++) { if(a[i-1] + k >= a[i]) sum+= a[i]-a[i-1]; else sum+=k; } sum+=k; if(sum >= h ) return true; else return false; } void solve() { cin>>n>>h; for(int i=1;i<=n;i++) cin>>a[i]; ll l = 1 ,r =1e18; while(l>1; if(check(mid)) r = mid; else l = mid+1; } if(check(l)) cout< E. 观察之后会发现,我们可以从 ‘L’ 开始bfs,然后对于每一个 . . . 如果周围 只有 < = 1 <=1 <=1个
. . . 的时候,那么这个点必然是 ‘+’,按照这个模拟即可
(其实看样例也挺好看出来的吧 hh
不过这题一直在调,不是 T L E TLE TLE 就是 R E RE RE 最后索性 s o l v e solve solve 和 c h e c k check check 全删了全部
写在了一个 m a i n main main 里面
CODEint t; cin>>t; while(t -- ) { int n,m; cin >> n >> m; vector补题问题s(n); for (auto& x : s) cin >> x; int sx = -1, sy = -1; for (int i =0 ; i < n; i++) for (int j = 0; j < m; j++) if (s[i][j] == 'L') sx = i, sy = j; vector dx = {0,1,0,-1}; vector dy = {1,0,-1,0}; auto check = [&](int x, int y)->bool //通过上一场学的正则表达式 { //分成函数写莫名RE vector > poss; int cnt = 0; for (int k = 0; k < 4; k++) { int nx = x + dx[k], ny = y + dy[k]; if (nx < 0 || ny < 0 || nx >= n || ny >= m || s[nx][ny] == '#') continue; if (s[nx][ny] == '+' || s[nx][ny] == 'L') cnt++; poss.push_back({nx,ny}); } if(cnt >= (int)poss.size()-1) return true; return false; }; queue > q; q.push({sx,sy}); while(q.size()) { auto [x,y] = q.front(); q.pop(); for (int k = 0; k < 4; k++) { int nx = x + dx[k], ny = y + dy[k]; if (nx < 0 || ny < 0 || nx >= n || ny >= m || s[nx][ny] == '#' || s[nx][ny] == '+' || s[nx][ny] == 'L') continue; if (check(nx,ny)) { s[nx][ny] = '+'; q.push({nx,ny}); } } } for (auto& x : s) cout << x << 'n'; } D. 貌似是一个DP,但是不会
传送门 : 和今天这个做的好像差不多的思路,但是不会 c h e c k check checkF. 某个大佬说和ICPC上海B一个思路 (我爬了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)