寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄寄|

TLE_Automation

园龄:2年9个月粉丝:19关注:23

2023.11.3 做题记录

CF349B *1700

Igor深深爱上了Tanya. 现在, Igor想表达他的爱意, 他便在Tanya家对面的墙上写下一串数字. Igor认为, 数字写得越大, Tanya越喜欢他. 不幸的是, 他只有v升油漆, 每个数字都会花掉一定的油漆ai. Igor不喜欢0 所以数中不会出现0. 问Igor能得到的最大的数是多少.

显然数的长度越大这个数越大,先用最少花费的数求出最大长度,然后从高位到低位挨着尝试替换即可。

#include<bits/stdc++.h>
#define lson rt << 1
#define rson rt << 1 | 1
using namespace std;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
inline int read() {
int res = 0, f = 0; char ch = getchar();
for(; !isdigit(ch); ch = getchar()) f |= (ch == '-');
for(; isdigit(ch); ch = getchar()) res = (res << 1) + (res << 3) + (ch - '0');
return f ? -res : res;
}
int V;
pair <int, int> a[15];
int ans[N << 3];
signed main() {
V = read();
for(int i = 1; i <= 9; i++) a[i].first = read(), a[i].second = i;
int MinFy = INT_MAX, Minwz = 0;
for(int i = 1; i <= 9; i++) {
if(MinFy > a[i].first) MinFy = a[i].first, Minwz = a[i].second;
if(MinFy == a[i].first) Minwz = a[i].second;
}
int Max_Len = V / MinFy;
V -= Max_Len * MinFy;
for(int i = 1; i <= Max_Len; i++) ans[i] = Minwz;
for(int i = 1; i <= Max_Len; i++) {
for(int j = 9; j > Minwz; j--) {
if(V + MinFy >= a[j].first) {
V += MinFy, V -= a[j].first, ans[i] = j;
break;
}
}
}
if(!Max_Len) return puts("-1"), 0;
for(int i = 1; i <= Max_Len; i++) cout << ans[i];
return 0;
}

CF1450C1 Errich-Tac-Toe (Easy Version) *2100

屁也不会

直接进入题解。

题解已阅,狗屁不通。

比较显然的就是考虑一个 3×3 的矩阵。

比如下面这样啊:

钦定 (i,j)0

发现得到这么个矩阵。

想了想要给他分为 3 种颜色,按照 (i+j) 分配的话,在任意一个 3×3 的矩阵里,都可以通过涂一个最少颜色来平局,然后就统计即可。

#include<bits/stdc++.h>
#define lson rt << 1
#define rson rt << 1 | 1
using namespace std;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
inline int read() {
int res = 0, f = 0; char ch = getchar();
for(; !isdigit(ch); ch = getchar()) f |= (ch == '-');
for(; isdigit(ch); ch = getchar()) res = (res << 1) + (res << 3) + (ch - '0');
return f ? -res : res;
}
char ch[310][310];
int cnt[10];
void Main() {
int n = read();
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) ch[i][j] = getchar();
getchar();
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) cnt[(i + j) % 3]++;
}
int Min = std::min(cnt[0], std::min(cnt[1], cnt[2]));
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if((i + j) % 3 == Min && ch[i][j] == 'X') ch[i][j] = 'O';
}
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) putchar(ch[i][j]);
putchar('\n');
}
cnt[0] = cnt[1] = cnt[2] = 0;
}
signed main() {
int T = read();
while(T--) Main();
return 0;
}

P5931 [清华集训2015] 灯泡 上位黄

随机跳到的 nb 题啊,之前就看他们做过,今天也来试试。

小数学题啊。

很显然的分类讨论吧。

当影子全在地上的时候,最大的情况就是影子刚好顶到墙上,由相似三角形可以知道。

x 为到灯下端的距离。

hH=DxD

hD=(Dx)H

x=DHhH

所以当 xDHhH 时,影子全落在地面上。

设影子的长度为 y

hy=Hx+y

化简可得:y=hHhx

显然具有单调性,x 最大的时候 y 最大。

然后就是可以投射到墙上的时候。

d 表示没墙多 🐍 的。

hH=D+dxD+d

能得到 d=HHhx+D

y=Dx+HHx+DHDhHx+2DH2Dh

我急眼了,按推的公式写好像不对/cy

不做了,明天早上再补 /cy

CF1420B

考虑 20+21+...+2n1=2n1

所以考虑最高位是不是相同即可,当最高位想同的时候 & 操作此位是 1,不同的时候 %^% 操作是 1

显然答案为 Ccntk2cntk 表示最高位为第 k 位的数的个数。

本文作者:TLE_Automation

本文链接:https://www.cnblogs.com/tttttttle/p/17807526.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TLE_Automation  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起