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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

24dian(牛客多校第三场)

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 24dian(牛客多校第三场) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

24dian(牛客多校第三場)

題意:

給你n張牌,每張牌的大小為1 ~ 13,問這些牌與加減乘除任意組合(可以使用括號),且但所有的有效解在計算過程中都涉及到分數,即非整數,能否組成答案m,如果可以,輸出所有牌的情況

題解:

直接按照題意模擬,這里是大佬代碼
注意題意:一個有效解,其所有能得到m的組合方式,其中都要設計到分數(即非整數)
建議多打幾遍。。emm
代碼中有詳細注釋

代碼:

#include<bits/stdc++.h> using namespace std; vector<double>v,ans[100009]; int n,m,flag,cnt,num; bool judge(double x,double y) {//判斷是否為整數 if (x>(int)x+1e-9) return 1;if (y>(int)y+1e-9) return 1;if (x/y>(int)(x/y)+1e-9) return 1;return 0; } void DFS2(int x,int qwq,vector<double> v) {if (x==n) {//符號已滿 if (fabs(v[0]-m)<1e-8) {++flag;//所有能求出m的方案 if (qwq) ++cnt;//存在非整數的解的情況 }return;}int sz=v.size();for (int i=0; i<sz; ++i)for (int j=0; j<sz; ++j) {if (i==j) continue;vector<double> tmp; tmp.clear();//任選兩個值進行運算的結果存入tmp//其他值不變存入tmp中 for (int k=0; k<sz; ++k)if (k!=i && k!=j) tmp.push_back(v[k]);tmp.push_back(v[i]+v[j]);DFS2(x+1,qwq,tmp);tmp.pop_back();tmp.push_back(v[i]-v[j]);DFS2(x+1,qwq,tmp);tmp.pop_back();tmp.push_back(v[i]*v[j]);DFS2(x+1,qwq,tmp);tmp.pop_back();tmp.push_back(v[i]/v[j]);DFS2(x+1,qwq|judge(v[i],v[j]),tmp);tmp.pop_back(); } } bool check(vector<double> v) {flag=0; cnt=0;DFS2(1,0,v);//flag==cnt說明是所有解都包含非整數 if (flag==cnt && cnt) return 1;return 0; } void DFS1(int x,int pre) {if (x==n+1) {//牌數已滿 if (check(v)) {ans[num++]=v;}return;}for (int i=pre; i<=13; ++i) {v.push_back(i);DFS1(x+1,i);v.pop_back();} } int main() {cin>>n>>m;DFS1(1,1);cout<<num<<endl;for (int i=0; i<num; ++i) {int sz=ans[i].size();for (int j=0; j<sz; ++j) cout<<ans[i][j]<<' ';puts("");} }

總結

以上是生活随笔為你收集整理的24dian(牛客多校第三场)的全部內容,希望文章能夠幫你解決所遇到的問題。

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