Comet OJ - Contest #10 和 EOJ Monthly 2019.9 的几道题
Comet OJ - Contest #10 A 鱼目混珠 substr直接取后几位连续子串 #include <set> #include <map> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; int main() { int t,ans=0; string s; scanf("%d",&t); while(t--) { cin>>s; int len=s.size(); if(len<5) continue; else { if(s.substr(len-5)=="acpty") ans++; } } printf("%dn",ans); return 0; } ? B 沉鱼落雁 题的本质是插数字模拟,可以分成有出现3次的情况,没有出现3次的情况,没有出现3次的情况还可以分成出现2次和没出现2次的情况,没有出现2次中只要数出现1次的情况即可。 由于数的范围是1e9,用桶排计数感觉会超时,然后就用了离散化,将范围降到了1e5。 #include <set> #include <map> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; vector<int> v; int a[100005],cnt[100005],cntt[5]; int find_key(int x) { return lower_bound(v.begin(),v.end(),x)-v.begin()+1; } int main() { int n,num; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); v.push_back(a[i]); } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); for(int i=1;i<=n;i++) { cnt[find_key(a[i])]++; } int ans=0; for(int i=1;i<=v.size();i++) { cntt[cnt[i]]++; } if(cntt[3]>0) { ans=cntt[3]-1+cntt[2]+cntt[1]/2; } else { if(cntt[2]>1) { ans=cntt[2]-1+cntt[1]; } else ans=cntt[1]; } printf("%dn",ans); return 0; } ? EOJ Monthly 2019.9 这场感觉比comet这场有点难啊,一个签到substr,一个签到逆元,逆元之前还没有看过...... D 站军姿 一个被当作签到的逆元题......EOJ的比赛之前的没怎么写过,感觉div2难度? 晚上写了这场,之前没看过逆元,结果轻松愉快的爆零。这个题的概率公式可以在网上找到的,所以感觉大家都签了这个题。 没有卡在这概率公式上,结果被long long的最大范围卡了(也是傻,? 2^(n-1)直接用1<<(n-1)算了......这必超long long啊,而且还没法mod,直接返回最后的结果了),以后说啥次方运算只用快速幂,乘一下mod一下真舒服。逆元我用的费马小定理直接套快速幂调用就行。最后注意特判1和2。 #include <map> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; const int mod=1000000007; ll qkpow(ll a,ll b) { ll ans=1; a=a%mod; while(b) { if(b&1)ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans%mod; } int main() { int t; ll n; scanf("%d",&t); while(t--) { scanf("%lld",&n); if(n==1 || n==2) printf("1n"); else { ll temp=qkpow(2,n-1); n=n%mod; printf("%lldn",n*qkpow(temp,mod-2)%mod); } } return 0; } ? A? 才艺展示 博弈最后输赢推导虽然看了sg函数,但这个我不会写,我太菜了。 所以这个就是看题解结论写的。 #include <map> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; int main() { int t; ll n,cnt=1; scanf("%d",&t); while(t--) { bool flag=false; scanf("%lld",&n); while(n>0) { if((cnt & 1) && (n & 1)) { flag=true; break; } n=n>>1; cnt++; } if(flag) printf("Little Fang Winn"); else printf("Cuber QQ Winn"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |