好用的网站开发编辑器,网站如何更换空间,想做外贸怎么找客户,网站域名怎么查询Problem - 1150B - Codeforces
小C是重度强迫症晚期患者#xff0c;如果某些图形无法按照他的想法排列#xff0c;那么他就会迎来他的末日。某天小C来到了心心念念的女神家里#xff08;绝对不可能是女装大佬#xff0c;绝对不可能#xff09;#xff0c;他发现地砖有两…
Problem - 1150B - Codeforces
小C是重度强迫症晚期患者如果某些图形无法按照他的想法排列那么他就会迎来他的末日。某天小C来到了心心念念的女神家里绝对不可能是女装大佬绝对不可能他发现地砖有两种颜色组成分别是白色和绿色。小C对女神家里的一切都充满好奇经过他不懈的研究终于发现绿色地砖是白色地砖涂了绿色涂料变成的这使他大为震惊但是这些都不重要主要是他家里的地砖是由十字形的绿色地砖组成只要能证明女神家的地砖也是由一个个绿色十字组成那么他就会认为女神和他很般配如果不能那么他就会迎来强迫症末日绿色十字如下图所示 女神家的地砖有n行n列总共n22块地砖。对于一个绿色十字小C认为必须由5块地砖组成而且两个十字间不可以共用绿色地砖由于女神家非常大小C的强迫症末日一时间竟不知道要不要降临所以需要你编程进行判断。
简单的暴力就可以了;
#includebits/stdc.h
using namespace std;
#define int long long
char mp[55][55];
int n;
int dx[5]{0,0,0,1,-1};
int dy[5]{0,1,-1,0,0};
signed main(){cinn;for(int i1;in;i){for(int j1;jn;j){cinmp[i][j]; }}int sum0;for(int i1;in;i){for(int j1;jn;j){sum0;for(int k1;k4;k){if(mp[i][j].){int xxidx[k];int yyjdy[k];if(xx0xxnyy0yynmp[xx][yy].){sum;}}}if(sum4){for(int k1;k4;k){if(mp[i][j].){int xxidx[k];int yyjdy[k];if(xx0xxnyy0yynmp[xx][yy].){mp[xx][yy]#;}}}mp[i][j]#;}}}for(int i1;in;i){for(int j1;jn;j){if(mp[i][j].){coutNOendl;return 0;}}}coutYESendl;return 0;
}
D - All Assign Point Add (atcoder.jp)
题意给你一个长度为n的数组你有Q次操作
有三种类型的操作:
1 x:将数组所有的值全部都变为x
2 x y:将y加入到数组下标为x的位置数组下标从1开始
3 x :输出下标为x的数组中值
数据范围是2e5
题解当执行操作1的时候不用全部都更新只用开一个数组记录执行操作2 / 3 之前有无将数更新为x即可
#includebits/stdc.h
using namespace std;
#define int long long
int a[200005];
int b[200005];
queueintone;
queuepairint,inttwo;
queueintthree;
queueintxuhao;
signed main(){int n;cinn;for(int i1;in;i){cina[i];}int Q;cinQ;int x0,f0;while(Q--){int op;cinop;if(op1){cinx;f;}else if(op2){int y,u;cinyu;if(b[y]!f){b[y]f;a[y]xu;}else{a[y]u;}}else if(op3){int p;cinp;if(b[p]f)couta[p]endl;else {b[p]f;a[p]x;couta[p]endl;}}}} Problem - 1332D - Codeforces 题解构造一个矩阵找找其中规律要让自己的算法和正确答案之间的差值不大于k;
因为k的取值范围是1e5转换成二进制就是2的17次方所以将117位,接着我们来构造一个矩阵
2*2的矩阵可以吗显然不行这样的话小明的算法和正确答案是一模一样的那我们构造一个2*3的矩阵
ans117;
我们需要让算法的结果为0正确答案为k即可
矩阵
ansk ans 0
k ansk k
按照小明的算法得到的结果就是
ansk ans 0
k ans(max(ans,k)) 0
而正确答案是不用取最大就取k,最后结果就是最大值k;
他们之间就像相差k;
#includebits/stdc.h
using namespace std;
#define int long longsigned main(){int k;cink;int ans(117);cout2 3endl;coutansk ans 0endl;coutk ansk kendl;return 0;
}
[ARC134B] Reserve or Reverse - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 什么是子序列
从最初序列通过去除某些元素但不打乱余下元素的相对位置在前或则在后而形成的新序列
从第一个字符开始遍历元素找到从a到h[i]的字母一旦发现能找到就交换并且缩短距离右边界
一些小细节就是找到的字母中一定不能超过r边界不然就不满足总序列的条件其次我们用栈区存元素出现的下标是为了让r在尽可能的范围内最小化缩短这样可能可以交换更多的字母
#include bits/stdc.h using namespace std;
string s;
vectorint v[30];
int N;
int main(){ cin N s; for(int i0; iN; i)v[s[i] - a].push_back(i); int r N - 1; // 初始化r为字符串s的最后一个字符的索引 for(int l0; lN; l){ int u -1; // 用于存储找到的符合条件的字符的索引初始化为-1 // 遍历从a到当前字符s[l]之间的所有字母按ASCII码顺序 for(int j0; js[l]-a u -1; j){ // 移除当前vector中索引大于r的元素因为这些元素在s[r]之后不可能与s[l]交换 while(!v[j].empty() v[j].back() r) v[j].pop_back(); // 如果当前vector不为空且最后一个元素的索引在[l1, r]之间即在当前字符s[l]之后但在s[r]之前或相等则更新u if(!v[j].empty() v[j].back() r v[j].back() l){ u v[j].back(), v[j].pop_back(); // 更新u并移除该元素因为已经找到并准备交换 } } // 如果找到了符合条件的字符即u ! -1则交换s[l]和s[u]或s[r]因为r在循环开始前被设置为u if(u ! -1){ r u; // 更新r为找到的字符的索引 swap(s[l], s[r]); // 交换字符 } } cout s; // 输出排序后的字符串 return 0;
}