Codeforces Round #697 (Div. 3)
原题链接:https://codeforces.com/contest/1475
A. Odd Divisor
倒着判,每次除2,时间复杂度nlogn
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int main() { int t; cin>>t; ll n; while(t--) { int pd=0; cin>>n; while(n>1) { if(n%2==1) { pd=1; printf("YES\n"); break; } else n/=2; } if(pd==0) printf("NO\n"); } return 0; }
B. New Year's Number
除以2020,记下来商和余数
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int main() { int t,n; cin>>t; while(t--) { cin>>n; if(n<2020) printf("NO\n"); else { int a=n/2020; int b=n%2020; if(a>=b) printf("YES\n"); else printf("NO\n"); } } return 0; }
C. Ball in Berland
对于a,b两组数,ans加上k-numa-numb+1就可以,一开始没有想明白,现场只相出了n方的解法
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int maxn=2e5+10; int a[maxn],b[maxn]; int numa[maxn],numb[maxn]; int main() { int t; cin>>t; int aa,bb,k; while(t--) { memset(numa,0,sizeof numa); memset(numb,0,sizeof numb); scanf("%d%d%d",&aa,&bb,&k); for(int i=1;i<=k;i++) scanf("%d",&a[i]),numa[a[i]]++; for(int i=1;i<=k;i++) scanf("%d",&b[i]),numb[b[i]]++; ll ans=0; for(int i=1;i<=k;i++) ans+=(k-numa[a[i]]-numb[b[i]]+1); cout<<ans/2<<endl; } return 0; }
D. Cleaning the Phone
前缀和+二分答案
E. Advertising Agency
想法是对的,一开始没有看到mod,右边界也算的有问题,WA了好几发
用yxc的模板计算组合数,1013ms 优化到 了15ms orz
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; const int mod=1e9+7; int a[1010]; bool cmp(int x,int y) { return x>y; } ll c[1010][1010]; // c[a][b] 表示从a个苹果中选b个的方案数 int main() { for (int i = 0; i < 1010; i ++ ) for (int j = 0; j <= i; j ++ ) if (!j) c[i][j] = 1; else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod; int t; cin>>t; int n,k; while(t--) { memset(a,0,sizeof a); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1,cmp); int l=k,r=k+1; while(a[k]==a[l-1]&&l>1) l--; while(a[k+1]==a[r+1]&&r<n) r++; // cout<<" "<<l<<" "<<r<<" "<<a[k]<<endl; if(a[k]!=a[k+1]||k==n) cout<<1<<endl; else { int aa=r-l+1,bb=k-l+1; cout<<c[aa][bb]<<endl; } } return 0; }
自古表白多白表
向来情书难书情
笑谈少年真年少
常与生人话人生

浙公网安备 33010602011771号