2021牛客多校3 - 24dian(dfs)
生活随笔
收集整理的這篇文章主要介紹了
2021牛客多校3 - 24dian(dfs)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:n(n≤4)n(n\le 4)n(n≤4) 張紙牌,每張的范圍可以取到 [1,13][1,13][1,13],問能否通過增加運算符和括號,使得運算結果等于 mmm,且:
題目分析:爆搜即可,搜的方法是有技巧的,比賽的時候不會處理括號的運算優先級遂放棄,還有就是需要讀懂題,題目沒讀懂一開始還以為是題目的問題,簡單寫一份偽代碼
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);}}} }意思就是,每次選擇兩個數進行運算,將運算結果放入集合中即可,注意在運算的過程中計算一下是否出現了浮點數
代碼:
// 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; }總結
以上是生活随笔為你收集整理的2021牛客多校3 - 24dian(dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021牛客多校3 - Black an
- 下一篇: 2021牛客多校3 - Minimum