Codeforces Round #677 (Div. 3)

it2025-07-10  8

A题

思路

按题意模拟即可

AC代码

#include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #define rep(x,l,u) for(ll x=l;x<u;x++) #define rrep(x,l,u) for(ll x=l;x>=u;x--) #define sz(x) x.size() #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; typedef unsigned long long ull; typedef pair<int,int> PII; typedef pair<char,char> PCC; typedef long long ll; typedef pair<ll,ll> PLL; const int N=3*1e5+10; const int M=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; void solve(){ int x;cin>>x; string s=to_string(x); int u=s[0]-'0',v=sz(s),ans=0; rep(i,0,u-1) ans+=10; if(v==4) ans+=10; else if(v==3) ans+=6; else if(v==2) ans+=3; else ans++; cout<<ans<<endl; } int main(){ IOS; //freopen("test.txt", "r", stdin); //freopen("test.txt", "w", stdout); int t;cin>>t; while(t--) solve(); return 0; }

B题

思路

找到起始 1 1 1的位置和结尾 1 1 1的位置,统计 [ s t , e d ] [st,ed] [st,ed]间0的位置即可

AC代码

#include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #define rep(x,l,u) for(ll x=l;x<u;x++) #define rrep(x,l,u) for(ll x=l;x>=u;x--) #define sz(x) x.size() #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; typedef unsigned long long ull; typedef pair<int,int> PII; typedef pair<char,char> PCC; typedef long long ll; typedef pair<ll,ll> PLL; const int N=55; const int M=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; int a[N]; void solve(){ int n;cin>>n; rep(i,1,n+1) cin>>a[i]; int st=0,ed=0; rep(i,1,n+1){ if(!st && a[i]) st=i; if(a[i]) ed=i; } int ans=0; rep(i,st,ed+1) if(!a[i]) ans++; cout<<ans<<endl; } int main(){ IOS; //freopen("test.txt", "r", stdin); //freopen("test.txt", "w", stdout); int t;cin>>t; while(t--) solve(); return 0; }

C题

思路

显然,如果最大值和最小值相同,则肯定不满足题意。否则,一定存在一个值 m x mx mx它的左右两边存在一个小于它的数。此时,该位置的鱼满足题意。

AC代码

#include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #define rep(x,l,u) for(ll x=l;x<u;x++) #define rrep(x,l,u) for(ll x=l;x>=u;x--) #define sz(x) x.size() #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; typedef unsigned long long ull; typedef pair<int,int> PII; typedef pair<char,char> PCC; typedef long long ll; typedef pair<ll,ll> PLL; const int N=3*1e5+10; const int M=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; int a[N]; void solve(){ int n;cin>>n; int mx=-1,mn=INF; rep(i,1,n+1){ cin>>a[i]; mx=max(mx,a[i]); mn=min(mn,a[i]); } if(mx==mn) cout<<-1<<endl; else{ a[0]=INF; a[n+1]=INF; rep(i,1,n+1){ if(a[i]==mx){ if(a[i]>a[i-1] ||a[i]>a[i+1]){ cout<<i<<endl; return; } } } } } int main(){ IOS; //freopen("test.txt", "r", stdin); //freopen("test.txt", "w", stdout); int t;cin>>t; while(t--) solve(); return 0; }

D

思路

显然,如果海盗的类别只有一种,则一定会发生冲突。否则,我们只需要在一个与该海盗类别不同的结点下连边即可。

AC代码

#include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #define rep(x,l,u) for(ll x=l;x<u;x++) #define rrep(x,l,u) for(ll x=l;x>=u;x--) #define sz(x) x.size() #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; typedef unsigned long long ull; typedef pair<int,int> PII; typedef pair<char,char> PCC; typedef long long ll; typedef pair<ll,ll> PLL; const int N=5005; const int M=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; int a[N]; bool st[N]; void solve(){ int n;cin>>n; mst(st,false); set<int> s; rep(i,1,n+1) cin>>a[i],s.insert(a[i]); bool flag=true; if(sz(s)==1) flag=false; if(!flag) cout<<"NO"<<endl; else{ cout<<"YES"<<endl; rep(i,1,n+1){ rep(j,1,n+1){ if(a[i]!=a[j] && !st[j]){ cout<<i<<' '<<j<<endl; st[j]=true; st[i]=true; } } } } } int main(){ IOS; //freopen("test.txt", "r", stdin); //freopen("test.txt", "w", stdout); int t;cin>>t; while(t--) solve(); return 0; }

E题

思路

简单的组合问题。第一个坑位有 n n n种选法,第二个坑位有 n − 1 n-1 n1种选法…最后一个坑位有 1 1 1种选法。最后再去掉重复的选法,得到公式 n ! / n / n / 2 n!/n/n/2 n!/n/n/2

AC代码

#include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #define rep(x,l,u) for(ll x=l;x<u;x++) #define rrep(x,l,u) for(ll x=l;x>=u;x--) #define sz(x) x.size() #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; typedef unsigned long long ull; typedef pair<int,int> PII; typedef pair<char,char> PCC; typedef long long ll; typedef pair<ll,ll> PLL; const int N=3*1e5+10; const int M=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; void solve(){ ll n;cin>>n; ll ans=1; rep(i,1,n+1) ans*=i; cout<<ans/(n*n/2)<<endl; } int main(){ IOS; //freopen("test.txt", "r", stdin); //freopen("test.txt", "w", stdout); //int t;cin>>t; //while(t--) solve(); return 0; }
最新回复(0)