先补完,题解有空再写,加深印象。
A Alice and Bob
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
long long n,x;
long long cnt;
int b;
int main(){
cin>>n;
bool f=0;
x=n;
for(int i=2;i<=x/i;i++){
b=0;
while(!(n%i)){b++;n=n/i;}
if(b&&b!=1) f=1;
cnt^=b;
}
if(n!=1) cnt^=1;
if(!cnt||f) cout<<"Alice win";
else cout<<"Bob win";
}
B 打对子
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=30;
int n;
bool v1[N];
bool v2[N];
int a1,a2;
char c;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c;
if(v1[c-'A']){
a1--;
v1[c-'A']=0;
}
else{
v1[c-'A']=1;
a1++;
}
}
for(int i=1;i<=n;i++){
cin>>c;
if(v2[c-'A']){
a2--;
v2[c-'A']=0;
}
else{
v2[c-'A']=1;
a2++;
}
}
cout<<a1<<endl;
if(a1<a2) cout<<"YES";
else cout<<"NO";
}
D 纪念品领取
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N=1e5+10;
int n,m;
int x,s,t;
int l[N],r[N];
int a[N];
bool cmp(int a,int b){
return a<b;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
l[i]=i-1;
r[i]=i+1;
}
s=1;
t=n;
for(int i=1;i<=m;i++){
cin>>x;
if(x==s) s=r[x];
r[l[x]]=r[x];
l[r[x]]=l[x];
l[x]=t;
r[x]=r[t];
r[t]=x;
t=x;
}
for(int i=1;i<=5;i++){
a[i]=s;
s=r[s];
}
sort(a+1,a+6,cmp);
for(int i=1;i<=5;i++){
cout<<a[i]<<' ';
}
}
E 聚会
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n;
long long a[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
long long ans=0;
for(int i=1;i<=n;i++){
if(a[i]<=ans+1) ans+=a[i];
else break;
}
cout<<ans+1<<'\n';
}
F 买车
#include <bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
const int N=1e5+10;
PII q1[N];
priority_queue<int> q;
int n,m,t,a,b;
int ans;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m>>t;
for(int i=1;i<=m;i++){
cin>>q1[i].first>>q1[i].second;
}
sort(q1+1,q1+1+m);
for(int i=1;i<=m;i++){
if(q1[i].first>t){
if(q.size()&&q.top()>=q1[i].first) {
ans++;
t=q.top();
}
else {cout<<-1<<'\n';
return 0;}
}
q.push(q1[i].first+q1[i].second);
}
if(t<n){
t=q.top();
ans++;
}
if(t>=n) cout<<ans<<'\n';
else cout<<-1<<'\n';
}
G 热身小游戏
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=1e9+7;
long long n,op,l,r;
int f[N];
long long a[N];
long long x=1;
long long qmi(long long a,long long b){
long long res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
a[i]=1;
f[i]=i;
cin>>op;
if(op==1){
cin>>a[i];
x=x*a[i]%mod;
}
else if(op==2){
cin>>l>>r;
while(find(r)>=l){
x=x*qmi(a[find(r)],mod-2)%mod;
f[find(r)]=find(r)-1;
}
}
else{
cout<<x<<'\n';
}
}
}
I 巡逻机器人
#include <bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,m,a[N],b[N];
int x,ans;
char op;
int RTO(int a,int x){
if(!a) return n;
if(a<=x) return x-a;
else return n-(a-x);
}
int LTO(int b,int x){
if(!b) return n;
if(b>=x) return b-x;
else return n-(x-b);
}
int calc(int a,int b,int x){
return (min(RTO(a,x),LTO(b,x)));
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>op;
if(op=='L') b[x]=x;
else a[x]=x;
}
for(int i=1;i<=n;i++){
if(!a[i])a[i]=a[i-1];
}
for(int i=1;i<=n;i++){
if(!a[i]) a[i]=a[n];
}
for(int i=n;i>=1;i--){
if(!b[i]) b[i]=b[i+1];
}
for(int i=n;i>=1;i--){
if(!b[i]) b[i]=b[1];
}
ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,calc(a[i],b[i],i));
}
cout<<ans<<'\n';
}
J 樱果运输
#include <bits/stdc++.h>
using namespace std;
const int N=1e2+10;
const int M=1e3+10;
int dp[N][M];
int e[N],t[N];
int n,m,x,y;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>e[i]>>t[i];
}
for(int i=1;i<=n;i++){
for(int j=i;j>=1;j--){
for(int k=M-1;k>=e[i];k--){
dp[j][k]=max(dp[j][k],dp[j-1][k-e[i]]+t[i]);
}
}
}
for(int i=1;i<=m;i++){
cin>>x>>y;
int res=-1;
for(int j=1;j<=n;j++){
if(dp[j][x]>=y){
res=j;
break;
}
}
cout<<res<<'\n';
}
}
K 糟糕的一天
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
int x,a[1000010];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int maxn=a[n];
int ans=0;
for(int i=n-1;i>=1;i--){
if(maxn>a[i])ans++;
else maxn=a[i];
}
cout<<ans<<endl;
}