Codeforces ECR50 div2题解
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Codeforces ECR50 div2题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                A:簽到
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long ll read() {ll x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } ll n,k; int main() {n=read(),k=read();cout<<(k-1)/n+1;return 0; }
B:大討論。想清楚的話可以寫的更優美一點。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } int n; int main() {n=read();for (int i=1;i<=n;i++){long long x,y,k,ans=-1;cin>>x>>y>>k;if (x>y) swap(x,y);if (k>=x){if (x==y) ans=((k&1)==(x&1))?k:k-2;else{ans=x;k-=x;y-=x;if (k<y) ans=-1;else{if (y%2==0){if (k&1) ans+=k-2;else ans+=k;}else ans+=k-1;}}}cout<<ans<<endl;}return 0; }
C:大力數位dp。還可以把所有合法數都找出來然后二分找答案。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } int n,a[20]; long long C(int n,int m) {if (m<0) return 0;if (m==0) return 1;if (m==1) return n;if (m==2) return n*(n-1)/2;if (m==3) return n*(n-1)*(n-2)/6; } long long calc(long long x) {int n=0,cnt=0;long long ans=0;memset(a,0,sizeof(a));while (x) a[++n]=x%10,x/=10;for (int i=n;i;i--)if (a[i]){if (cnt<=3) ans++;if (cnt<=2) ans+=9*C(i-1,1);if (cnt<=1) ans+=9*9*C(i-1,2);if (cnt<=0) ans+=9*9*9*C(i-1,3);cnt++;if (cnt<=3) ans+=a[i]-1;if (cnt<=2) ans+=(a[i]-1)*9*C(i-1,1);if (cnt<=1) ans+=(a[i]-1)*9*9*C(i-1,2);}if (cnt<=3) ans++;return ans; } int main() {n=read();for (int i=1;i<=n;i++){long long x,y;cin>>x>>y;cout<<calc(y)-calc(x-1)<<endl;}return 0; }
D:B題難度。雙指針移動,若匹配上則ans++。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 300010 int n,m,ans=0; long long a[N],b[N]; int main() {n=read();for (int i=1;i<=n;i++) a[i]=read()+a[i-1];m=read();for (int i=1;i<=m;i++) b[i]=read()+b[i-1];int x=0;for (int i=1;i<=n;i++){while (x<=m&&a[i]>b[x]) x++;if (x>m) {ans=-1;break;}if (a[i]==b[x]) ans++;}if (a[n]!=b[m]) ans=-1;if (x<m) ans=-1;cout<<ans;return 0; }
E:gcd一下求出線段上整點數量再暴力算交點去重即可。沒有寫,據說很卡精度。
F:可以發現所求的就是存在k>1,k∈N*使開k次方為整數的數。可以算出有多少個能開k次方的數,然后用莫比烏斯函數容斥。開方直接用pow再微調一下。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long ll read() {ll x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 110 int T,prime[N],mobius[N],cnt=0; bool flag[N]; ll calc(ll n,int k) {ll a=pow(n,(long double)1/k);ll s=1;for (int i=1;i<=k;i++){if (s>n/(a+1)) break;s=s*(a+1);if (i==k&&s<=n) return a+1;}return a; } int main() {flag[1]=1;mobius[1]=1;for (int i=2;i<=100;i++){if (!flag[i]) prime[++cnt]=i,mobius[i]=-1;for (int j=1;prime[j]*i<=100&&j<=cnt;j++){flag[prime[j]*i]=1;if (i%prime[j]==0) break;mobius[prime[j]*i]=-mobius[i];}}T=read();while (T--){ll n=read(),ans=0;for (int i=1;i<=60;i++)if (mobius[i]) ans+=mobius[i]*(calc(n,i)-1);printf("%I64d\n",ans);}return 0; }
G:如果圖是強連通的,那么圖中每個點都在某些源到匯的路徑上。于是只要源和匯之間相互可達就可以了。用這個性質直接隨機的話據說錯誤率只有1e-8。
當然考慮靠譜的做法。注意到源匯的個數很少,考慮枚舉源子集,驗證其是否可能與剩下部分不在同一SCC內(當然枚舉的子集不包括全集)。
源子集對應了一個匯子集。那么顯然若匯子集大小不大于源子集,則可以將匯的出邊全部連向該源子集,剩下部分無法與其強連通。
上述檢驗沒有考慮子集內部是否可以連接至強連通。不過在枚舉該子集的子集時這種情況已經被檢驗。
轉載于:https://www.cnblogs.com/Gloid/p/9615435.html
總結
以上是生活随笔為你收集整理的Codeforces ECR50 div2题解的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: windows常用命令有哪些(整理)
 - 下一篇: 光绪元宝十当湖北省造,能值多少钱?