13.4.7周賽解題報告
第一題,開始被輸出嚇著了,仔細看,水題一道,dfs即可啊
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int p[25][5]; bool v[25]; int m,a,num; int f[25]; void go(int x,int n) { v[x]=1; f[n]=x; if(n==20&&(p[x][1]==m||p[x][2]==m||p[x][3]==m)) { cout<<num++<<": "; for(int i=1;i<=20;i++)cout<<" "<<f[i]; cout<<" "<<m<<endl; } else { for(int i=1;i<=3;i++) { if(v[p[x][i]]==0)go(p[x][i],n+1); } } v[x]=0; } int main() { for(int i=1;i<=20;i++) { for(int j=1;j<=3;j++) { scanf("%d",&a); p[i][j]=a; } } while(scanf("%d",&m)&&m) { num=1; memset(v,0,sizeof(v)); go(m,1); } return 0; }
第二和第三題,都是dfs的基礎題,沒什麼可講的。
第四題,函式本身是單調遞增的,先確定無解的情況,有解的話再找解。我是先確定大概整數範圍,再小範圍的找解,這題在精度上吃虧了。。。。。wa了好久
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; double y; double s(double x) { return 8.0*pow(x,4)+7.0*pow(x,3)+2.0*pow(x,2)+3.0*x+6.0; } double find() { for(double i=0;i<=100;i++) { if(s(i)>=y)return (i-1.0); } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%lf",&y); if(y<6||s(100.0)<y) { cout<<"No solution!"<<endl; continue; } if(y==6) { cout<<"0.0000"<<endl; continue; } double l=find(); while(l<=100) { if(s(l)>=y) { printf("%.4f\n",l); break; } l+=0.000001; } } return 0; }
第五題,嗯,有點難度啊,向朱老闆請教才得以ac。基本思路就是二進位制列舉+位運算。這裡先要做一個預處理,我設了個p[][]陣列,將num題的所有情況存在p[num]中,然後二分題數,在p中找到符合的情況。
#include<iostream> #include<cstdio> #include<cstring> #define maxn 1<<15 using namespace std; int n,m,k,f[1005],num,ti,ans; int p[17][33000],c[16]; char name[50]; int er(int i) { int nnn=0; int j = i; while(j>0) { nnn+=j%2; j=j/2; } return nnn; } int main() { memset(c,0,sizeof(c)); for(int i=0;i<=32768;i++) { int a=er(i); p[a][c[a]]=i; c[a]++; } while(scanf("%d%d%d",&n,&m,&k)!=EOF) { memset(f,0,4*(n+1)); for(int i=0;i<n;i++) { scanf("%s%d",&name,&num); for(int j=0;j<num;j++) { scanf("%d",&ti); f[i]+=1<<(ti-1); } } ans=0; int high=m,low=0,mid,count; while(low<=high) { mid=(low+high)/2; for(int i=0;i<c[mid];i++) { count=0; for(int j=0;j<n;j++) { if((f[j]&p[mid][i])==p[mid][i])count++; } if(count>=k) { if(er(p[mid][i])>ans)ans=er(p[mid][i]); ans=mid; low=mid+1; break; } } if(low<=mid)high=mid-1; } cout<<ans<<endl; } return 0; }
第六題,二分時間,子彈反正都是讓它最遠距離,看mid時間內能否結束狩獵。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double x,y,x2,y2,lx,ly,vd,vb,l;
int main()
{
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x,&y,&x2,&y2,&lx,&ly,&vd,&vb,&l)&&(x||y||x2||y2||lx||ly||vd||vb||l))
{
double high=1e+9,low=0,mid,len,t=l/vb,ans=1e+9;
while(high-low>0.00000001)
{
mid=(low+high)/2;
len=sqrt((x2-x-lx*mid)*(x2-x-lx*mid)+(y2-y-ly*mid)*(y2-y-ly*mid));
if((mid-t)*vd>=fabs(len - l))
{
high=mid;
if(mid<ans)ans=mid;
}
else low=mid;
}
printf("%.3f %.3f\n",l,ans);
}
return 0;
}
第七題,三分題,先確定體積表示式,再三分高度,得到最小體積時的半徑和高。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int t,n;
double x[10005],y[10005],r,l,mid,mmid,ra,rra,a,b;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
l=0;
for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf",&a,&b,&y[i]);
if(y[i]>l)l=y[i];
x[i]=sqrt(a*a+b*b);
}
r=30000;
while(r-l>0.0000000001)
{
mid=(l+r)/2;
mmid=(mid+r)/2;
ra=0;
rra=0;
for(int i=0;i<n;i++)
{
if(x[i]*mid/(mid-y[i])>ra)ra=x[i]*mid/(mid-y[i]);
if(x[i]*mmid/(mmid-y[i])>rra)rra=x[i]*mmid/(mmid-y[i]);
}
if(ra*ra*mid>rra*rra*mmid)l=mid;
else r=mmid;
}
printf("%.3f %.3f\n",l,ra);
}
return 0;
}
第八題,一開始以為是數學問題,但居然也是三分。。。。這裡可以三分轉過的角度,然後假設車的左側中間頂在角上,右後頂在牆上,算出凸出的長度,去最大的和y比較,從而判斷能否過彎。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define pi 3.1415926535898
using namespace std;
double x,y,l,w,r,lo,mid,mmid,m,mm,ans;
int main()
{
while(scanf("%lf%lf%lf%lf",&x,&y,&l,&w)!=EOF)
{
ans=0;
r=pi/2;
lo=0;
while(r-lo>0.000000001)
{
mid=(lo+r)/2;
mmid=(mid+lo)/2;
m=cos(mid)*(l-(x-w*cos(mid))/sin(mid))+w*sin(mid);
mm=cos(mmid)*(l-(x-w*cos(mmid))/sin(mmid))+w*sin(mmid);
ans=max(ans,max(m,mm));
if(m<mm)r=mid;
else lo=mmid;
}
if(ans>y)printf("no\n");
else printf("yes\n");
}
return 0;
}
第九題,也是三分,三分x,找出各函式的y值取最大的那個,然後找到所以x的時候這些最大值中最小的那個。
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1<<29
using namespace std;
double a[10005],b[10005],c[10005];
int n,t;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
double r=1000,l=0,mid,mmid,m,ma,mm,mma;
double ans = maxn;
while(r-l>0.000000001)
{
mid=(r+l)/2;
mmid=(r+mid)/2;
m=-maxn;
mm=-maxn;
for(int i=0;i<n;i++)
{
ma=a[i]*mid*mid+b[i]*mid+c[i];
mma=a[i]*mmid*mmid+b[i]*mmid+c[i];
if(ma>m)m=ma;
if(mma>mm)mm=mma;
}
ans = min(m,mm);
if(m>mm)l=mid;
else r=mmid;
}
printf("%.4f\n",ans);
}
return 0;
}
第十題,=。=!!!!再說吧,有難度啊。。。
相關推薦
13.4.7周賽解題報告
第一題,開始被輸出嚇著了,仔細看,水題一道,dfs即可啊 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int p[25][5]; b
Leetcode 第136場周賽解題報告
週日的比賽的時候正在外面辦事,沒有參加。賽後看了下題目,幾道題除了表面要考的內容,還是有些能發散擴充套件的地方。 做題目不是最終目的,通過做題發現知識盲區,去研究學習,才能不斷提高。 理論和實際是有關係的,一些題目也都有現實意義。計算機的一些模擬操作,通過數學演算法,能夠大大減輕程式碼量和演算法複雜度。 第一
Leetcode 第137場周賽解題報告
今天的比賽的題目相對來說比較「直白」,不像前幾周都是一些特定的演算法,如果你沒學過不可能想出來。 做了這些周,對leetcode比賽的題目也發現了一些「規律」。 一般前兩道題都很「簡單」,只要有想法,直接敲程式碼就能解出來。更多考察的是結果是否正確,速度其次。 後兩道題有些難度 ,不同場次難度不一樣,也可能和
2015-9-13 NOIP模擬賽解題報告(by hzwer)
++ ron 解題報告 正整數 max 決策 pty uri 由於 小奇挖礦 「題目背景」 小奇要開采一些礦物,它駕駛著一臺帶有鉆頭(初始能力值w)的飛船,按既定路線依次飛過喵星系的n個星球。 「問題描述」 星球分為2類:資源型和維修型。 1.資源型:含礦物質量a[i],若
歡樂賽解題報告
輸入 不同 eof ~~ ostream 同步 題目 由於 .cpp ~~一場不歡樂的歡樂賽 時間分配::T1做的時候還可以,大約三十分鐘寫了個深搜(鬼知道我為啥不用廣搜,大概是因為快半個月沒寫了)寫完後去研究第二題,剛開始以為是貪心,很快寫了出來,但是自己推了一會舉出了反
NOI 2015 滯後賽解題報告
operator scrip emc void long 存在 truct append asc 報同步賽的時候出了些意外。於是僅僅能做一做“滯後賽”了2333 DAY1 T1離線+離散化搞,對於相等的部分直接並查集,不等部分查看是否在同一並查集中就
2018.10.6 NOIP模擬賽解題報告
報告 pan 期望 spa mat 分情況討論 。。 都是 數據 心路歷程 預計得分:\(100 + 100 + 20 = 220\) 實際得分:\(100 + 100 + 30 = 230\) 辣雞模擬賽。。 T1T2都是一眼題,T3考驗卡常數還只有一檔暴力分。 開場發現
洛谷十一月月賽解題報告
比賽地址:https://www.luogu.org/contestnew/show/12006 唉,T3考試的時候zz了,把式子寫錯了。。。。結果只有30分啊,然後T4連10分都沒騙到。雖然身為蒟蒻但實在有點自閉了,只好來發篇解題報告。。。qwq T1 P4994 終於結束的起點 就是簡單的模擬,不說了
2018.10.03 NOI+模擬賽 解題報告
得分: 30+5+0=3530+5+0=3530+5+0=35(考得真不咋滴) T1T1T1:奧義商店(點此看題面) 以為很簡單,對著這題想了一個多小時,最後果斷打了個暴力交了… … 看完題解發現其實
2018.10.26 NOIP2018模擬賽 解題報告
得分: 0+10+100+10+100+10+10(T1T1T1死於假題面,T3T3T3死於細節… …) P.S.P.S.P.S.由於原題是圖片,所以我沒有上傳題目描述,只有資料。 T1T1T1:顏料
2014 第六屆藍橋杯校內賽解題報告 答案
僅僅留做以後回過頭來勉勵自己,轉載請註明出處。1. 輸入一個字串,求它包含多少個單詞。單詞間以一個或者多個空格分開。 第一個單詞前,最後一個單詞後也可能有0到多個空格。 比如:" abc xyz" 包含兩個單詞,"ab c xyz " 包含3個單詞。
11.7NOIP模擬賽解題報告
心路歷程 預計得分:\(50 + 100 + 100\) 實際得分:\(50 + 100 +100\) T2 T3兩道資料結構題美滋滋,然而寫完就過去\(3h\)美滋滋 T1數學題學弟們都會做Orzzz 還是太菜了qwq Sol T1 設\(g = gcd(n, m, k)\),判斷給出的數在模\(g\)的意
11.6NOIP模擬賽解題報告
心路歷程 預計得分:\(100 + 100 + 100 = 300\) 實際得分:\(100 +100 +100 = 300\) 學OI兩年終於AK了一次qwq(雖然題目炒雞水。。) 紀念一下這令人激動的時刻。。 8點開始考,9:40就都拍上了。。可見題目確實水。。然後又去做了做另一套 Sol T1 題目中
11.5NOIP模擬賽解題報告
心路歷程 預計得分:\(100 + 40 + 30 = 170\) 實際得分:\(100 +100 + 50 = 250\) 辣雞資料毀我青春 T1一眼不會做感覺要涼 T2好像一波折半搜尋就做完了 T3好像是神仙題不會做。。 打完T1暴力後去淦T2,結果最後在排序的時候把greater<LL>()
暑假第四次考試 沖刺Noip模擬賽4 解題報告——五十嵐芒果醬
空格 註意 工程 tin tex app als family 如果 題1 韜韜搶蘋果(apple) 【問題描述】 又到了收獲的季節,樹上結了許多韜韜,錯了,是許多蘋果,有很多個小韜韜都來摘蘋 果。每個韜韜都想要最大的蘋果,所以發生了爭執,為了解決他們的矛盾,出題人定了
2018.7.21NOIP模擬賽?解題報告
algo racket vector i++ lin 答案 替換 搜索 我們 題面 預計得分:70 + 60 + 30 = 160 實際得分:40 + 60 + 0 = 100 T1數組開小了 T2比賽結束後5min AC T3加了個記憶話搜索wa了、、
nowcoder OI 周賽 最後的晚餐(dinner) 解題報告
lld cst acs return 通過 .com ++ tro put 最後的晚餐(dinner) 鏈接: https://www.nowcoder.com/acm/contest/219/B 來源:牛客網 題目描述 \(\tt{**YZ}\)(已被和諧)的食堂實在是太
leetCode周賽106解題報告 javascript
比賽地址: https://leetcode-cn.com/contest/weekly-contest-106 922. 按奇偶排序陣列 II 922. Sort Array By Parity II 給定一個非負整數陣列 A, A 中一半整數是奇數,一半整數是偶數。 對陣列進行排序,以
PAT (解題報告) 7-4 求字首表示式的值 (25 分)
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4的字首表示式是:+ + 2 * 3 - 7 4 / 8 4。請設計程式計算字首表示式的結果值。 輸入格式: 輸入在一行內給出不超過30個字元的字首
沖刺Noip2017模擬賽8 解題報告——五十嵐芒果醬
.cn 其中 www. tex 我不 closed 必須 std -s 1、鼎紋 【問題描述】 據說鼎紋的 種制造 式是 銅模印出來的,這是我國古代勞動 智慧 的結晶。銅模印過的地 ,會留下深深的印記,經過時間的煉化,洗 練成歷史的遺存。 聰明的古代勞動人民擁有一個 a