2021牛客多校3 - 24dian(dfs)
生活随笔
收集整理的這篇文章主要介紹了
2021牛客多校3 - 24dian(dfs)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:點(diǎn)擊查看
題目大意:n(n≤4)n(n\le 4)n(n≤4) 張紙牌,每張的范圍可以取到 [1,13][1,13][1,13],問(wèn)能否通過(guò)增加運(yùn)算符和括號(hào),使得運(yùn)算結(jié)果等于 mmm,且:
題目分析:爆搜即可,搜的方法是有技巧的,比賽的時(shí)候不會(huì)處理括號(hào)的運(yùn)算優(yōu)先級(jí)遂放棄,還有就是需要讀懂題,題目沒(méi)讀懂一開(kāi)始還以為是題目的問(wèn)題,簡(jiǎn)單寫一份偽代碼
dfs(step,set) {for(int i:set) {for(int j:set) {if(i!=j) {set.del(i),set.del(j);set.add((i+j) or (i-j) or (i*j) or (i/j));dfs(step+1,set);}}} }意思就是,每次選擇兩個(gè)數(shù)進(jìn)行運(yùn)算,將運(yùn)算結(jié)果放入集合中即可,注意在運(yùn)算的過(guò)程中計(jì)算一下是否出現(xiàn)了浮點(diǎn)數(shù)
代碼:
// Problem: 24dian // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/11254/F // Memory Limit: 524288 MB // Time Limit: 6000 ms // // Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2) // #pragma GCC optimize("Ofast","inline","-ffast-math") // #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> #define lowbit(x) x&-x using namespace std; typedef long long LL; typedef unsigned long long ull; template<typename T> inline void read(T &x) {T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f; } template<typename T> inline void write(T x) {if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0'); } const int inf=0x3f3f3f3f; const int N=1e6+100; const double eps=1e-6; int n,m,ans,as[N][5]; double a[5]; int flag; int sgn(double x) {if(fabs(x)<=eps) {return 0;} else if(x<0) {return -1;} else {return 1;} } bool check(double x) {x-=(int)x;return sgn(x)!=0; } void dfs(int step,int state) {if(flag==3) {return;}if(step==4) {if(sgn(a[1]-m)==0) {if(state) {flag|=1;} else {flag|=3;}}return;}double A[5];for(int i=1;i<=4;i++) {A[i]=a[i];}for(int i=1;i<=n-step+1;i++) {for(int j=1;j<=n-step+1;j++) {if(i==j) {continue;}for(int k=1;k<=4;k++) {int nstate=state;if(k==1) {a[i]+=a[j];} else if(k==2) {a[i]-=a[j];} else if(k==3) {a[i]*=a[j];} else if(k==4) {a[i]/=a[j];nstate|=check(a[i]);}swap(a[j],a[n-step+1]);dfs(step+1,nstate);for(int i=1;i<=4;i++) {a[i]=A[i];}}}} } void dfs1(int step,int pre) {if(step>4) {flag=0;dfs(1,0);if(flag==1) {ans++;for(int i=1;i<=4;i++) {as[ans][i]=a[i];}}return;}for(int i=pre;i<=13;i++) {a[step]=i;dfs1(step+1,i);} } int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);read(n),read(m);if(n<=3) {return 0*puts("0");}dfs1(1,1);cout<<ans<<endl;for(int i=1;i<=ans;i++) {for(int j=1;j<=4;j++) {printf("%d ",as[i][j]);}puts("");}return 0; }總結(jié)
以上是生活随笔為你收集整理的2021牛客多校3 - 24dian(dfs)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021牛客多校3 - Black an
- 下一篇: 2021牛客多校3 - Minimum