Codeforces Round #491 (Div. 2)
Codeforces Round #491 (Div. 2)
A. If at first you don't succeed...
按題意判斷
#include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;++i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } using namespace std; int n,a,b,c; int main() {scanf("%d%d%d%d",&a,&b,&c,&n);int p = a+b-c;if(a>=c&&b>=c&&n-p>=1) printf("%d\n",n-p);else printf("-1\n");return 0; }B. Getting an A
排序之后,暴力修改加check...被fst。。。涼透
#include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;++i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } using namespace std; int n; int a[111]; bool ck() {double x=0;rep(i,1,n)x+=a[i];x/=n;return (int)(x+0.5) == 5; } int main() {scanf("%d",&n);rep(i,1,n)scanf("%d",&a[i]);sort(a+1,a+n+1);int ans=0;rep(i,1,n+1) {if(ck()){printf("%d\n",ans);return 0;}if(a[i]<5){a[i]=5;++ans;}}return 0; }C. Candies
每次減\(\frac{1}{10}\)的這個(gè)操作使得數(shù)減小的非常快,二分k暴力模擬即可
#include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;++i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } using namespace std; ll n; int ck(ll k) {ll tn=n,x,res=0;while(tn) {if(tn<k) res+=tn,tn=0;else tn-=k,res+=k;if(tn>=10){x = tn/10;tn -= x;}}return (res*2LL >= n); } int A[10000]; int main() {scanf("%I64d",&n);ll l=1,r=n,ans,mid;while(l<=r){mid = (l+r)/2LL;if(ck(mid))r=mid-1,ans=mid;else l=mid+1;}printf("%I64d\n",ans);return 0; }D. Bishwock
直接搜索即可。。。一開始推了個(gè)假的結(jié)論打算小范圍暴力,然后dp,WA了。。。無奈交了暴力的代碼。。過了
#include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;++i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } using namespace std; int n,ans; char s[2][111]; void dfs(int now,int ed,int d){if(now==ed+1){ans = max(ans,d);return;}if(s[0][now-1]=='0'&&s[1][now-1]=='0'&&s[0][now]=='0'){s[0][now-1]=s[1][now-1]=s[0][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now-1]=s[0][now]='0';}else if(s[0][now-1]=='0'&&s[1][now-1]=='0'&&s[1][now]=='0'){s[0][now-1]=s[1][now-1]=s[1][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now-1]=s[1][now]='0';}else if(s[0][now-1]=='0'&&s[1][now]=='0'&&s[0][now]=='0'){s[0][now-1]=s[1][now]=s[0][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now]=s[0][now]='0';}else if(s[1][now-1]=='0'&&s[1][now]=='0'&&s[0][now]=='0'){s[1][now-1]=s[1][now]=s[0][now]='X';dfs(now+1,ed,d+1);s[1][now-1]=s[1][now]=s[0][now]='0';}else dfs(now+1,ed,d); } int solve(int l,int r){ans=0;dfs(l+1,r,0);return ans; } int dp[111]; int main() {scanf(" %s",s[0]);scanf(" %s",s[1]);n = strlen(s[0]);cout << solve(0,n-1) << endl;return 0; }E. Bus Number
統(tǒng)計(jì)0~9出現(xiàn)的次數(shù),按題意暴力枚舉每個(gè)數(shù)分別出現(xiàn)多少個(gè),這個(gè)復(fù)雜度可以接受,對(duì)于每個(gè)情況設(shè)一共有sum個(gè)數(shù)字,A[i]為數(shù)字i出現(xiàn)的次數(shù),那么\(\frac{sum!}{A[0]!A[1]!...A[9]!}\)為不管前導(dǎo)0情況下的排列數(shù),現(xiàn)在考慮如何計(jì)算有前導(dǎo)0的情況,把非0的數(shù)仿照上邊的方法求出排列數(shù),現(xiàn)在把一個(gè)0放到開頭,剩余的0插空放在這sum個(gè)數(shù)之間即可,這是經(jīng)典的球盒模型,球無別,盒子有別可空。把上面兩個(gè)值相減就是答案。。。。欲哭無淚的手速。。。
#include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;++i) #define pb push_back #define mem(W) memset(W,0,sizeof(W)) typedef long long ll; inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f; } const int N = 105; using namespace std; int n; char s[33]; int p[N], notp[N], nxt[N], b[N]; void init(){notp[1]=1;nxt[1]=1;for(int i=2;i<=20;++i) {if(!notp[i]) p[++p[0]]=i,nxt[i]=i;for(int j=1;j<=p[0]&&i*p[j]<=20;++j) {notp[i*p[j]] = 1;nxt[i*p[j]]=p[j];if(i%p[j]==0)break;}} } ll q_pow(ll a,ll b) {ll ans=1;while(b) {if(b&1LL) ans=(ans*a);a=(a*a);b>>=1LL;}return ans; } inline void add(int x,int f) {while(x!=1){b[nxt[x]]+=f;x/=nxt[x];} } ll cal() {ll ans = 1;rep(i,1,p[0])ans = (ans*q_pow(p[i],b[p[i]])),b[p[i]]=0;return ans; } ll ans=0; int sum=0,num[11],A[11]; string v; set<string> ts; void solve(){v.clear();rep(i,0,9)rep(j,1,num[i])v+=(char)('0'+i);int T = 1;for(int i=1;i<=v.size();++i) T*=i;while(T--){cout << v <<endl;if(v[0]!='0')ts.insert(v);next_permutation(v.begin(),v.end());} } void dfs(int t) {if(t==10){rep(i,1,sum)add(i,1);rep(i,0,9){rep(j,1,num[i]) add(j,-1);}//solve();ans += cal();if(num[0]){int m = sum-num[0]+1, n = num[0]-1;rep(i,1,m+n-1)add(i,1);rep(i,1,m-1)add(i,-1);rep(i,1,n)add(i,-1);rep(i,1,sum-num[0])add(i,1);rep(i,1,9)rep(j,1,num[i])add(j,-1);ans -= cal();}return;}if(A[t]==0)dfs(t+1);else {rep(i,1,A[t]){num[t]+=i;sum+=i;dfs(t+1);num[t]-=i;sum-=i;}} }int main() {init();scanf(" %s",s);n=strlen(s);rep(i,0,n-1)++A[s[i]-'0'];dfs(0);printf("%I64d\n",ans);//cout << ts.size() << endl;return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/RRRR-wys/p/9219483.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Codeforces Round #491 (Div. 2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 格子衬衣怎么搭配好看 这样搭配更时髦好看
- 下一篇: 2018 ACM-ICPC World