環(huán)保網(wǎng)站建設(shè)說明成都網(wǎng)站建設(shè)方案外包
https://vjudge.net/contest/581138
A - Humidex
模擬題
題目大意
給三個類型數(shù)字通過公式來回轉(zhuǎn)化
思路
求e的對數(shù)有l(wèi)og函數(shù),不懂為什么不會出精度錯誤,很迷,給的三個數(shù)字也沒有順序,需要多判斷。
#include<cstdio>
#include<iostream>
#include<cmath>
//Sometimes weather reports give the temperature and dewpoint,
// or the temperature and humidex
/*
D 15.0 H 34.0
D 25.0 H 42.3
E
*/
using namespace std;
int main()
{char a,b;double a1,b1;while(1){cin>>a;if(a=='E')break;cin>>a1>>b>>b1;if(a=='T'&&b=='D'||a=='D'&&b=='T'){ if(a=='D'&&b=='T')swap(a1,b1);double e=6.11*(pow(2.718281828,5417.7530*((1/273.16)-(1/(b1+273.16)))));double h=0.5555*(e-10.0);double humidex = a1+h;printf("T %.1lf D %.1lf H %.1lf\n",a1,b1,humidex);}else if(a=='T'&&b=='H'||a=='H'&&b=='T'){if(a=='H'&&b=='T')swap(a1,b1);double dewpoint;double h=b1-a1;double e=h/0.5555+10.0;double x=log(e/6.11)/5417.753;dewpoint=1/(1/273.16-x)-273.16;printf("T %.1lf D %.1lf H %.1lf\n",a1,dewpoint,b1);}else // d h{if(a=='H'&&b=='D')swap(a1,b1);double e=6.11*pow(2.718281828,5417.7530*((1/273.16)-(1/(a1+273.16))));double h=(0.5555)*(e - 10.0);double temperature=b1-h;printf("T %.1lf D %.1lf H %.1lf\n",temperature,a1,b1);}}}
B - Moving Tables
題目大意
兩排都是房間,一排兩百個房間,上面按奇數(shù),下面按偶數(shù)編號,之后房間兩兩之間要搬桌子,搬桌子期間中間通道全部占用,可同步進(jìn)行,搬一次10分鐘,求最小時間
思路
就把中間通道編號,奇數(shù)和偶數(shù)的編號調(diào)成1-200,之后對區(qū)間進(jìn)行累加,重合次數(shù)最多的就是最小時間。注意坑就是,區(qū)間不一樣從小到大,l,r要判斷一下大小。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int box[205];
/*
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
*/
int main()
{int T;cin>>T;while(T--){int n;cin>>n;memset(box,0,sizeof(box));int maxx=0;for(int i=1; i<=n; i++){int l,r;cin>>l>>r;if(l%2==1)l=l+1;if(r%2==1)r=r+1;l=l/2;r=r/2;if(l>r)swap(l,r);for(int j=l; j<=r; j++){box[j]++;maxx=max(box[j],maxx);}}printf("%d\n",maxx*10);}}
C - Counterfeit Dollar
題意
有12個硬幣,現(xiàn)在知道其中有一個假的,已知稱三次天平可以找出來假硬幣,假硬幣有可能輕或重,每次給三組稱量結(jié)果,求出哪個是硬幣,是輕是重。
思路
好丑陋的代碼,不懂為啥我寫的這么長,思路不太好吧,我的思路就是去暴力枚舉每一個假硬幣,并且枚舉它是輕的假還是重的假,用box數(shù)組記錄每次天平上各個位置的重量,真硬幣就算重量1,假輕硬幣就重量0,假重硬幣就重量10,最后判斷,找出來就行,模擬題,寫的是真費勁,OJ還不支持string 用的char還查了一堆函數(shù),費勁,代碼能力現(xiàn)在下降嚴(yán)重。
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
/*
1
ABCDEF GHIJKL up
ABC DEF even
I J down
*/
int box[20];
int main()
{int n;cin>>n;while(n--){char a[3][15],b[3][15],c[3][15];memset(box,0,sizeof(box));for(int i=0; i<3; i++){scanf("%s %s %s",a[i],b[i],c[i]);strcat(a[i],b[i]);}for(int i=1; i<=12; i++) // 枚舉每個都是假幣{char x='A'+i-1;// 假幣輕int flagt=0;int pos,lenn;char t[20];for(int j=0; j<3; j++){memset(box,0,sizeof(box));int len=strlen(a[j]);for(int k=0; k<len; k++){if(a[j][k]!=x)box[k]++;if(a[j][k]==x){pos=k;lenn=len;
// t=c[j];strcpy(t,c[j]);}}int box1=0,box2=0;for(int k=0; k<len/2; k++)box1+=box[k];for(int k=len/2; k<len; k++)box2+=box[k];if(strcmp(c[j],"even")==0&&box1==box2) flagt++;if(strcmp(c[j],"up")==0&&box1>box2) flagt++;if(strcmp(c[j],"down")==0&&box1<box2) flagt++;
// printf("%d %d %c %d len=%d\n",box1,box2,x,flagt,len);}//假幣重if(flagt!=3){flagt=0;for(int j=0; j<3; j++){memset(box,0,sizeof(box));int len=strlen(a[j]);for(int k=0; k<len; k++){if(a[j][k]!=x)box[k]++;if(a[j][k]==x){box[k]+=10;pos=k;lenn=len;
// t=c[j];strcpy(t,c[j]);}}int box1=0,box2=0;for(int k=0; k<len/2; k++)box1+=box[k];for(int k=len/2; k<len; k++)box2+=box[k];if(strcmp(c[j],"even")==0&&box1==box2) flagt++;if(strcmp(c[j],"up")==0&&box1>box2) flagt++;if(strcmp(c[j],"down")==0&&box1<box2) flagt++;}}if(flagt==3){if(pos<lenn/2){if(strcmp(t,"up")==0)printf("%c is the counterfeit coin and it is heavy.\n",x);elseprintf("%c is the counterfeit coin and it is light.\n",x);}else{if(strcmp(t,"up")==0)printf("%c is the counterfeit coin and it is light.\n",x);elseprintf("%c is the counterfeit coin and it is heavy.\n",x);}break;}}}}
D - Radar Installation
題目大意
雷達(dá)部署在x軸,給出半徑,陸地在任意位置,現(xiàn)在已知所有陸地位置,要求使用最少雷達(dá)覆蓋所有陸地。
思路
以每個陸地為圓心畫圓,交x軸出現(xiàn)線段,線段長度即為這個陸地所需要的雷達(dá)區(qū)間,對每個陸地轉(zhuǎn)化為一個線段,將線段按右端點排序,之后從左往右遍歷線段,每次呢取端點的最右端作為雷達(dá),下一個線段出現(xiàn)左端點在雷達(dá)左右兩邊的情況,在左邊呢就不用管,在右邊呢就更新右端點為新的雷達(dá)。
這個題,輸入格式好奇怪,我覺得是個錯題。思路對了,照著別的代碼硬改出來。為什么n=0能過?不應(yīng)該n0&&d0嗎?
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;struct node
{double l,r;
} a[1005];
int cmp(node a,node b)
{return a.r<b.r;
}
int main()
{int cnt=0;int n;double d;while(scanf("%d%lf",&n,&d)){cnt++;if(n==0) break;int flag=0;for(int i=1; i<=n; i++){double x,y;scanf("%lf%lf",&x,&y);
// if(d<y||d<=0)if(d<y||d<=0){flag=1;continue;}double c=sqrt(1.0*d*d-1.0*y*y);a[i].l=(double)x-c;a[i].r=(double)x+c;
// printf("%lf %lf\n",a[i].l,a[i].r);}if(flag==1){printf("Case %d: -1\n",cnt);continue;}sort(a+1,a+1+n,cmp);int ans=0;double pos=-100000000;for(int i=1; i<=n; i++){if(pos<a[i].l){pos=a[i].r;ans++;}}printf("Case %d: %d\n",cnt,ans);}
}
H - Cow Bowling
題目大意
從頂點往下向左或向右,走到最下面,找到一條累加和最大的值。
思路
數(shù)字三角形經(jīng)典題
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int dp[355][355];
int m[355][355];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)scanf("%d",&m[i][j]);}for(int i=1;i<=n;i++)dp[n][i]=m[n][i];for(int i=n-1;i>=1;i--)for(int j=1;j<=i;j++){dp[i][j]=m[i][j]+max(dp[i+1][j],dp[i+1][j+1]);}printf("%d",dp[1][1]);
}