A - Coffee 題意:給你一個字元串,要你判斷是否滿足一下條件,全部滿足則輸出“Yes”,否則輸出“No”。 (1)字元串的第3個字母等於字元串的第4個字母 (2)字元串的第5個字母等於字元串的第6個字母 (3)字元串的長度為6,且全部為小寫字母 題解:簽到題,易解 代碼: #include< ...
題意:給你一個字元串,要你判斷是否滿足一下條件,全部滿足則輸出“Yes”,否則輸出“No”。
(1)字元串的第3個字母等於字元串的第4個字母
(2)字元串的第5個字母等於字元串的第6個字母
(3)字元串的長度為6,且全部為小寫字母
題解:簽到題,易解
代碼:
#include<iostream> #include<cstring> #include<map> #include<algorithm> using namespace std; #define ll long long int main(){ string ptr; cin>>ptr; int f=1; for(int i=0;i<ptr.length();i++){ if(ptr[i]>='A'&&ptr[i]<'Z'){ f=0; break; } } if(f==0){ cout<<"No"<<endl; return 0; } if(ptr.length()==6){ if(ptr[2]==ptr[3]&&ptr[4]==ptr[5]){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } }else{ cout<<"No"<<endl; } return 0; }
題解:是一個簡單的貪心題,也屬於簽到題
代碼:
#include<iostream> #include<cstring> #include<map> #include<algorithm> using namespace std; #define ll long long int main(){ ll mo; cin>>mo; ll sum=0; ll n1=mo/500; ll n2=(mo%500)/5; sum=n1*1000+n2*5; cout<<sum<<endl; return 0; }
C - Traveling Salesman around Lake
題意:大概意思就是存在一個周長為K的圓,在它的周邊分佈著N個點,分佈分別距離圓的最北端的激距離分別為ai,由下麵的N個數給出
題解:這一題其實比較簡單,你將這個圓分為N-1段,將他們的的和,然後遍歷捨去某一段,取它的最小值即可,
代碼:
#include<iostream> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll num[200010]={0}; int main(){ ll K,N; cin>>K>>N; memset(num,0,sizeof(num)); for(int i=0;i<N;i++){ cin>>num[i]; } sort(num,num+N); if(N==1){//只有一個 cout<<0<<endl; }else if(N==2){//有兩個 ll len=num[N-1]-num[0]; cout<<min(len,K-len)<<endl; }else{//至少有三個及以上 ll min_l=10000000; ll len[200010]={0},t=0; ll sum=0; for(int i=1;i<N;i++){ len[t++]=num[i]-num[i-1]; sum=sum+len[t-1]; } len[t++]=K-num[N-1]+num[0]; sum=sum+len[t-1]; for(int i=0;i<t;i++){//丟掉第 i 個數 min_l=min(min_l,sum-len[i]); } cout<<min_l<<endl; } return 0; }
題意:這一題大概是講存在N個頂點,從1~N相鄰兩個頂點之間存在一條邊,給出x、y,這兩個頂點也存在一條邊,令k=1,2,3,4,,,,N-1,求兩個點之間的最短距離為k對數
題解:這裡可以講每兩個點的距離分為兩種情況:經過x,y;不經過x,y,就可以分別求出每一對的距離,取這兩者的最小值,然後用桶來給每中距離計數即可
代碼:
#include<iostream> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll s[2005][2005]; ll ans[2005*2005]={0}; int main(){ ll N,x,y; cin>>N>>x>>y; ll a=x,b=y; x=min(a,b); y=max(a,b); for(ll i=1;i<=N;i++){ for(ll j=i+1;j<=N;j++){ s[i][j]=min(j-i,abs(x-i)+abs(y-j)+1); } } for(int i=1;i<=N;i++){ for(int j=i+1;j<=N;j++){ ans[s[i][j]]++; } } for(int i=1;i<N;i++){ cout<<ans[i]<<endl; } return 0; }