1. 牛牛喝醉
牛牛昨晚喝醉了,走路开始疯狂摇摆,方向也分不清了。假设他所在的地方是一个二维平面,开始它位于坐标为(0,0)的地方,
并且面朝北方即y轴正方向。W表示牛牛向前走,A表示牛牛把当前方向向左转90度,D表示牛牛把方向向右转90度,S表示牛牛呆在原地。
给出一个字符串表示牛牛的酒后行为方式,你能告诉他走完后它位于哪个坐标点吗?
简单模拟题
int main(int argc, char *argv[]) {
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
string beseq;
cin>>beseq;
int x = 0; int y = 0;
int diridx = 0;
for(auto c:beseq){
switch (c){
case 'W':
x = x + dir[diridx][0];
y = y + dir[diridx][1];
break;
case 'A': //左转
diridx = (diridx+3)%4;
break;
case 'D'://右转
diridx = (diridx+1)%4;
break;
default:
break;
}
}
cout<<x<<" "<<y;
return 0;
}
2. 对的个数
给定长度为N的序列a和非负整数X。找出满足ai+aj=X的(i,j)对的数量。
哈希计数
int main(int argc, char *argv[]) {
int N; int X;
cin>>N>>X;
int res = 0;
unordered_map<int,int> m;
for(int i=0;i<N;i++){
int num;
cin>>num;
if(num==X-num) res++;
if(m.count(X-num))
res = res + m[X-num]*2;
m[num]++;
}
cout<<res;
return 0;
}
3. 牛牛操作数组
牛牛有一个长度为n且值都为0的数组a。对于这个数组件牛每次操作可以选择一个区间[l,r],
对于[l,r]上的每一个数牛牛必须让其加一或者乘二(元素之间操作独立,可以选择一些元素乘二,一些元素加一,但是区间内每个元素都要操作)。
牛牛还有一个目标数组b,牛牛想知道对于初始数组a来说,其最少操作多少次可以将其变为b呢。
找到规律,使得0变为目标二进制数的操作次数最少是,其位数+1的个数-1
int main(int argc, char *argv[]) {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int res = 0;
int num;
for(int i=0;i<n;i++){
int times = 0;
cin>>num;
while(num){
times += num%2;
num/=2;
times ++;
}
res = max(res,times-1);
}
cout<<res<<endl;;
}
return 0;
}
标签:10,diridx,int,res,2024.08,break,牛牛,num,京东
From: https://www.cnblogs.com/929code/p/18400982