A. Three Stringsios
#include<iostream> #include<algorithm> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ string a,b,c; cin>>a>>b>>c; int flag=1; for(int i=0;i<a.length();i++){ if(a[i]==b[i] && b[i]==c[i]) continue; else if(a[i]==c[i]) continue; else if(b[i]==c[i]) continue; else { flag=0;break; } } if(flag==1) cout<<"YES\n"; else cout<<"NO\n"; } }
B. Motarack's Birthday數組
思路:找到在-1附近(不包括-1)數值的最大最小值,而後K=(max+min)/2,最後將k代回數組統計一下相鄰的最大值便可spa
#include<iostream> #include<algorithm> #include<cstring> #define inf 0x3f3f3f3f using namespace std; typedef long long ll; const int maxn=2e5+10; ll a[maxn]; int main() { int x,n; cin>>x; while(x--){ scanf("%d",&n); for(int i=0;i<=2*n;i++) a[i]=0; for(int i=1;i<=n;i++) scanf("%lld",&a[i]); ll mx=-inf,mi=inf; for(int i=1;i<=n;i++){ if(a[i]==-1) continue; if(a[i-1]==-1||a[i+1]==-1){ mx=max(a[i],mx); mi=min(a[i],mi); } } if(mx==-inf&&mi==inf){ cout<<"0 1"<<endl; continue; } ll k=(mx+mi)/2; mx=-inf; for(int i=2;i<=n;i++){ ll x=a[i],y=a[i-1]; if(x==-1) x=k; if(y==-1) y=k; mx=max(abs(x-y),mx); } cout<<mx<<" "<<k<<endl; } return 0; }
C. Ayoub's functioncode
思路:直接推出公式 (n*(n+1))/2 - [k*(k+1)/2]*g - (k+1)*(z mod g) ,其中z = (n-m) , g=m+1, k = z/g (向下取整)blog
#include<iostream> #include<algorithm> using namespace std; typedef long long ll; int main() { ll n,m,x,y,c,t; int k; cin>>k; while(k--){ scanf("%lld%lld",&n,&m); t=n; n-=m; m++; x=n/m; y=n%m; c=m-y; cout<<t*(t+1)/2-x*(x+1)*c/2-(x+1)*(x+2)*y/2<<endl; } return 0; }
D. Time to Runci
思路:能夠發現經過合適的方法,咱們能夠將全部邊都走遍,那麼這個方法就是先不停向右再不停向左而後向下直到走到最後一行的最右邊,而後開始向上走再向下走再向左走就能夠將整張圖走完string
比較複雜的就是如何記錄路徑,能夠開一個vector裏面存放的是pair<int x,char ch>,分別是重複的次數與方向
it
以後再不停答案存到另外一個vector中,而後累計x直到k位置就跳出,最後再輸出便可io
#include<iostream> #include<algorithm> #include<vector> using namespace std; vector<pair<int,char> > a,ans; int n,m,k; void inse(int x,char ch) { if(x>0) a.push_back({x,ch}); } inline void insertt(int x, char c) { if (x > 0) { ans.push_back({x, c}); } } bool solve() { for (auto i : a) { insertt(std::min(i.first, k), i.second); k -= std::min(i.first, k); } return k <= 0; } int main() { scanf("%d%d%d",&n,&m,&k); for(int i=1;i<n;i++){ inse(m-1,'R'); inse(m-1,'L'); inse(1,'D'); } inse(m-1,'R'); for(int i=1;i<m;i++){ inse(n-1,'U'); inse(n-1,'D'); inse(1,'L'); } inse(n-1,'U'); if(!solve()) cout<<"NO"<<endl; else{ cout<<"YES"<<endl; cout<<ans.size()<<endl; for (auto i : ans) printf("%d %c\n", i.first, i.second); } return 0; }