Codeforces Round #828 (Div. 3)
易发现一个数字只能对应一个字母,mp统计判断一下即可
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; int a[N]; map<int,char> mp; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; for(int i=0;i<n;i++)a[i]=0; mp.clear(); for(int i=0;i<n;i++)cin>>a[i]; string s; cin>>s; int f=1; for(int i=0;i<s.length();i++){ if(mp.count(a[i])){ if(mp[a[i]]==s[i])continue; else{ f=0; break; } } else mp[a[i]]=s[i]; } if(f)puts("YES"); else puts("NO"); } }
先把原数组和加一下,统计出偶数和奇数的数量,然后在累加的时候维护其奇偶数量的变化。
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; int a[N]; map<int,char> mp; int main(){ int t; cin>>t; while(t--){ int n,k; cin>>n>>k; long long int sum=0,cnta=0,cntb=0; for(int i=0;i<n;i++){ cin>>a[i]; sum+=a[i]; if(a[i]%2)cnta++; else cntb++; } while(k--){ int op,x; cin>>op>>x; if(op==1){ if(x%2==0){ sum+=cnta*x; } else { sum+=cnta*x; cntb+=cnta; cnta=0; } } else { if(x%2==0){ sum+=cntb*x; } else { sum+=cntb*x; cnta+=cntb; cntb=0; } } cout<<sum<<endl; } } }
扫一遍,边扫边更新值,同时记录一下第一个green下标,最后判断判断一下
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; char a[N]; map<int,char> mp; int main(){ int t; cin>>t; while(t--){ int n; char x; cin>>n>>x; for(int i=0;i<n;i++)a[i]=0; if(x=='g'){ for(int i=0;i<n;i++)cin>>a[i]; cout<<0<<endl; continue; } int minidex=0,f=0; int maxx=0,num=0; for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]=='g'&&!f){ f=1; minidex=i; } if(a[i]=='g'){ maxx=max(num,maxx); num=0; } else if(a[i]==x){ if(num!=0){ num++; continue; } else num++; } else { if(num==0)continue; else num++; } } if(num==0)cout<<maxx<<endl; else cout<<max(maxx,num+minidex)<<endl; } }
在数组中找出2的因子个数,如果满足了n个ans就是0,否则需要通过操作来补足。操作出1-n所有数中2因子的数量,优先操作2因子数量最大的数。
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; long long int ph[32]; int main(){ for(int i = 1; i <= 31; ++i)ph[i] = 1<<i; int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); long long int bei=0; for(int i=0;i<n;i++){ int x; scanf("%d",&x); while(x%2==0){ x/=2; bei++; } } int r=0; for(int i=1;i<=32;i++){ if(ph[i]>n)r=i; } int ans=0; if(bei>=n){ printf("0\n"); continue; } int f=0; for(int i = r; i >= 1; i--){ for(int j = 1; ph[i] <= n/j ; j += 2){ bei += i; ans ++; if(bei>= n){ printf("%d\n",ans); f=1; break; } } if(f)break; } if(bei<n)printf("-1\n"); } }
E2. Divisible Numbers (hard version) 数学暴力枚举因子
暴力枚举,虽然abcd范围是1e9,但他们因子并不多,如下图,枚举a,b的因子,乘积为a*b的因子,计算找到的第一个大于a和b的数,判断是否大于c和d
#include<bits/stdc++.h> using namespace std; typedef long long ull; vector<ull> va,vb; int main(){ int t; cin>>t; while(t--){ va.clear(); vb.clear(); ull a,b,c,d; cin>>a>>b>>c>>d; for(int i=1;i*i<=a;i++){ if(a%i==0){ va.push_back(i);va.push_back(a/i); } } for(int i=1;i*i<=b;i++){ if(b%i==0){ vb.push_back(i);vb.push_back(b/i); } } int h=0; for(auto it1:va){ for(auto it2:vb){ ull g=1ull*it1*it2; ull x=((a+g)/g)*g; if(x>c)continue; ull f=1ull*a*b/g; ull y=(ull)((b+f)/f)*f; if(y>d)continue; cout<<x<<' '<<y<<endl; h=1; break; } if(h)break; } if(!h)cout<<-1<<' '<<-1<<endl; } }
待补
分类:
codeforces
标签:
codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!