日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

T - Memory and Trident CodeForces - 712B( 注意:* ++ = 的优先级

發布時間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 T - Memory and Trident CodeForces - 712B( 注意:* ++ = 的优先级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:有四種命令:U代表上移一個單位,D代表下移一個單位,R代表右移一個單位,L代表左移一個單位。

現在給出一串命令,問怎樣修改命令中的任意一條命令,使得命令結束后重新返回原點,并且修改的步數最少。

思路:把問題抽象化,統計四中命令各自有多少,之后D與U相互抵消(numD-numU),R與L相互抵消(numR-numL),將兩個差值的絕對值相加之后除以二就是結果。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void f(int *x,int *y){
if(*x>=*y){
(*y)++;
}
if(*x<*y){
(*x)++;
}
}
void g(int *x,int *y){
if(*x>=*y){
(*x)--;
}
if(*x<*y){
(*y)--;
}
}
int main(){
char str[100500];
gets(str);
int i,len=strlen(str),l=0,r=0,d=0,u=0;
int rslt=0;
if(len%2!=0){
printf("-1\n");
return 0;
}
else for(i=0;i<len;i++){
if(str[i]=='L')l ++ ;
if(str[i]=='R')r ++;
if(str[i]=='U')u++;
if(str[i]=='D')d++;
}
if((l+r)%2!=0){
f(&l,&r);
g(&u,&d);
rslt++;
}
rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2));
printf("%d\n",rslt);
return 0;
}

?

void函數是判斷l+f?是奇數時,將其換成偶數?而不增加補數

這是通過的代碼 ,但起初結果死活不對? 后來發現是因為函數中寫的是*x++?而++的優先級是比*高的,自然就不對了

but,看了別人才發現完全不用這么復雜好吧

如果l+f為奇數結果會在偶數的基礎上增加一步,而? ? ?rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2))的值此時也加一,所以判斷奇數偶數完全沒有必要,?結果是一樣的

?

改進后

#include <stdio.h> #include <string.h> #include <stdlib.h>int main(){char str[100500];gets(str);int i,len=strlen(str),l=0,r=0,d=0,u=0;int rslt=0;if(len%2!=0){printf("-1\n");return 0;}else for(i=0;i<len;i++){if(str[i]=='L')l ++ ;if(str[i]=='R')r ++;if(str[i]=='U')u++;if(str[i]=='D')d++;}rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2));printf("%d\n",rslt);return 0;

?

轉載于:https://www.cnblogs.com/-ifrush/p/10084384.html

總結

以上是生活随笔為你收集整理的T - Memory and Trident CodeForces - 712B( 注意:* ++ = 的优先级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。