#include<bits/stdc++.h>
using namespace std;
int f1(string s)
{
int num = 0;
for(int i=s.length()-1;i>=0;i--)
{
num = num + pow(2,s.length()-1-i)*(s[i]-'0');
}
return num;
}
int f2(string s)
{
int num = 0;
for(int i=s.length()-1;i>=0;i--)
{
num = num + pow(3,s.length()-1-i)*(s[i]-'0');
}
return num;
}
int main()
{
int a[100],b[100];
int count1 = 0,count2 = 0;
string s1,s2;
cin >> s1 >> s2;
for(int i=0;i<s1.length();i++){
if(s1[i]=='0') s1[i] = '1';
else s1[i] = '0';
a[count1++] = f1(s1);
if(s1[i]=='0') s1[i] = '1';
else s1[i] = '0';
}
for(int i=0;i<s2.length();i++)
{
if(s2[i]=='0'){
s2[i] = '1';
b[count2++] = f2(s2);
s2[i] = '2';
b[count2++] = f2(s2);
s2[i] = '0';
}
else if(s2[i] == '1'){
s2[i] = '0';
b[count2++] = f2(s2);
s2[i] = '2';
b[count2++] = f2(s2);
s2[i] = '1';
}
else{
s2[i] = '0';
b[count2++] = f2(s2);
s2[i] = '1';
b[count2++] = f2(s2);
s2[i] = '2';
}
}
for(int i=0;i<count1;i++)
for(int j=0;j<count2;j++)
if(a[i]==b[j]) {
cout << a[i] << endl;
return 0;
}
}
#include <bits/stdc++.h>
using namespace std;
int n,m,l,r;
int b[1000010]={0};
int main(){
cin >> n >> m;
while(m--){
cin >> l >> r;
b[l]++;
b[r+1]--;
}
for(int i=1;i<=n;i++) b[i] = b[i-1] + b[i];
sort(b+1,b+1+n);
cout << b[(n+1)>>1] << endl;
return 0;
}
///差分 快排
#include <bits/stdc++.h>
using namespace std;
int n,m;
int dir[4][2] = {
{-1,0},
{0,-1},
{1,0},
{0,1}
};
#define CHECK(x,y) (x<n&&x>=0&&y < m&&y >=0)
struct node {int x,y;};
char p[100][100];
vector<node> point1,point2;
int get(int x1,int y1,int x2,int y2){
return abs(x1-x2) + abs(y1-y2);
}
void bfs1(int dx,int dy){
queue<node> q;
node start, next;
start.x = dx;
start.y = dy;
q.push(start);
p[start.x][start.y] = '.';
while(!q.empty()){
start = q.front();
q.pop();
//cout << "out : " << start.x << start.y << endl;
point1.push_back(start);
for(int i=0;i<4;i++){
next.x = start.x + dir[i][0];
next.y = start.y + dir[i][1];
if(CHECK(next.x,next.y)&&p[next.x][next.y]=='X'){
p[next.x][next.y] = '.';
q.push(next);
}
}
}
}
void bfs2(int dx,int dy){
queue<node> q;
node start, next;
start.x = dx;
start.y = dy;
q.push(start);
while(!q.empty()){
start = q.front();
q.pop();
//cout << "out : " << start.x << start.y << endl;
point2.push_back(start);
point2.push_back(start);
for(int i=0;i<4;i++){
next.x = start.x + dir[i][0];
next.y = start.y + dir[i][1];
if(CHECK(next.x,next.y)&&p[next.x][next.y]=='X'){
p[next.x][next.y] = '.';
q.push(next);
}
}
}
}
int main(){
bool l = false;
int x,y,dx,dy;
cin >> n >> m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++) cin >> p[i][j];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
if(p[i][j]=='X'){
dx = i;
dy = j;
l = true;
break;
}
}
if(l == true) break;
}
bfs1(dx,dy);
/* for(int i=0;i<n;i++){
for(int j=0;j<m;j++) {cout << p[i][j] << " ";}
cout << endl;} */
l = false;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
if(p[i][j]=='X'){
dx = i;
dy = j;
l = true;
break;
}
}
if(l == true) break;
}
//cout << "dx" << dx << "dy" << dy << endl;
bfs2(dx,dy);
int min = 9999999;
for(int i=0;i<point1.size();i++)
for(int j=0;j<point2.size();j++)
{
if(get(point1[i].x,point1[i].y,point2[j].x,point2[j].y)<min) min = get(point1[i].x,point1[i].y,point2[j].x,point2[j].y);
}
cout << min-1 << endl;
}
//今天就学了bfs
//蔡哭了QWQ
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int xx,yy;
int n,ox,oy;
int p[N][N];
bool l[N][N];
int dist[N][N];
class P{
public :
int nx,ny;
}tmp;
int movexx[]={-1,0,1,0},moveyy[]={0,1,0,-1};
void bfs(int dx,int dy){
deque<P> q;
q.push_front({dx,dy});
l[dx][dy] = 1;
dist[dx][dy] = 0;
while(q.size()){
tmp = q.front();
q.pop_front();
for(int i=0;i<4;i++){
int nextx = tmp.nx + movexx[i];
int nexty = tmp.ny + moveyy[i];
if(l[nextx][nexty]) continue;
if(nextx<0||nextx>xx||nexty<0||nexty>yy) continue;
if(p[nextx][nexty]==1){//有甘草+1
dist[nextx][nexty] = dist[tmp.nx][tmp.ny]+1;
q.push_back({nextx,nexty});///有甘草先放后面
}
else{
dist[nextx][nexty] = dist[tmp.nx][tmp.ny];
q.push_front({nextx,nexty});
}
l[nextx][nexty] = 1;//已经走过了
}
}
}
int main(){
cin >> n >> ox >> oy;
xx = ox , yy = oy;
int a,b;
for(int i=0;i<n;i++) {
cin >> a >> b;
p[a][b] = 1;//有甘草
xx = max(xx, a + 1), yy = max(yy, b + 1);
}
bfs(ox,oy);
cout << dist[0][0];
}
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N],b[N],c[N];
class P{
public:
int l;
int aio;
}p[N];
bool ac(P a,P b){
return a.l < b.l;
}
int main(){
int n,last,x,num = 1,v=1,max=1,m=0;
cin >> n;
cin >> a[0];
last = a[0];
n--;
while(n--){
cin >> x;
if(x!=last) a[num++] = x;
last = x;
}
//cout << num << endl;
//for(int i=0;i<num;i++) cout << a[i] << " ";
for(int i=1;i<num-1;i++){
if(a[i]<a[i-1]&&a[i]<a[i+1]){
p[m].l = a[i];
//cout << p[m].l << endl;
p[m].aio = -1;
m++;
}
else if(a[i]>a[i-1]&&a[i]>a[i+1]){
p[m].l = a[i];
p[m].aio = 1;
m++;
}
}
if(a[0]>a[1]){
p[m].l = a[0];
p[m].aio = 1;
m++;
}
if(a[num-1] > a[num-2]) {
p[m].l = a[num-1];
p[m].aio = 1;
m++;
}
sort(p,p+m,ac);
//for(int i=0;i<m;i++) cout << p[i].l << " " << p[i].aio << endl;
for(int i=0;i<m;i++){
if(p[i].aio == -1) v++;
else v--;
if(v > max) max = v;
}
cout << max << endl;
}
#include <bits/stdc++.h>
using namespace std;
char p[10][10];
bool pl[10][10];
int n_max = 0,n;
#define CHECK(x,y) (x>=0&&y>=0&&x<n&&y<n)
int dx[] = {-1,0,1,0},dy[] = {0,1,0,-1};
int dfs(int x,int y,int n1,int n2){
if(n1 == n2){n_max = max(n_max,n1+n2);return 0;}
for(int i=0;i<4;i++){
int movex = x + dx[i],movey = y + dy[i];
if(CHECK(movex,movey)&&pl[movex][movey]==false){
if(n2>0&&p[movex][movey]=='(') continue;//n2>0已经捡到了 ) 遇到(就不能再捡(
pl[movex][movey] = true;
if(p[movex][movey]=='(') dfs(movex,movey,n1+1,n2);
else dfs(movex,movey,n1,n2+1);
pl[movex][movey] = false;
}
}
return 0;
}
int main(){
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)cin >> p[i][j];
if(p[0][0]==')') {
cout << 0 << endl;
return 0;
}
pl[0][0] = true;
dfs(0,0,1,0);
cout << n_max << endl;
return 0;
}
看到一个好的做法QAQ
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
stack<char> stk;
char p[N];
int num = 0;
int main(){
cin >> p;
for(int i=0;p[i];i++){
if(p[i] == '(') stk.push(p[i]);
else{
if(stk.size() == 0 || stk.top() != '(') continue;
else{
stk.pop();
num = num + 2;
}
}
}
cout << num << endl;
return 0;
}