简单的枚举判断即可
- #include "bits/stdc++.h"
- using namespace std;
-
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
- void solve()
- {
- string s;
- cin>>s;
- int sum=0;
- for (int i=3;i<6;i++){
- sum=sum*10+(s[i]-'0');
- }
- string s1=s.substr(0,3);
- if(s1=="ABC" && sum>=1 && sum<=349 && sum!=316){
- YES
- }
- else {
- NO
- }
-
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }
如果一个洞奇数次进,则总数加一偶数次进总数减一。
- #include "bits/stdc++.h"
- using namespace std;
-
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
- void solve()
- {
- int n,q;
- cin>>n>>q;
- int sum=n;
- vector<int> a(n+1,1);
-
- for (int i=1;i<=q;i++){
- int x;
- cin>>x;
- if(a[x]==1){
- a[x]=0;
- sum--;
- }
- else {
- a[x]=1;
- sum++;
- }
- }
- cout<<sum;
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }
先用一个数组记录第几个输入的数字,然后一个数组记录这个数字的位置,
然后再按照排列从小到大的顺序遍历,如果这个数不在相对应的位置上就和其需要到的位置上的数交换 。时间复杂度(n).
- #include "bits/stdc++.h"
- using namespace std;
-
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
- void solve()
- {
- int n;
- cin>>n;
- vi a(n+1);
- vi b(n+1);
-
- for (int i=1;i<=n;i++){
- cin>>a[i];
- b[a[i]]=i;
- }
- int cnt=0;
- vector<pi> v;
-
- for (int i=1;i<=n;i++){
- if(b[i]!=i){
- int j=b[i];
- swap(a[i],a[j]);
- swap(b[a[i]],b[a[j]]);
- v.push_back({i,j});
- }
- }
-
- cout<<(int)v.size()<<endl;
- for (int i=0;i<(int)v.size();i++){
- auto [x,y]=v[i];
- cout<<x<<" "<<y<<endl;
- }
-
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }
这题考察联通块的知识,每个联通块内都可以有(cnt)*(cnt-1)/2条边。
这题可以用两种做法:
因为存在一个点被联通块内多个点连接的情况,所以每次先加上边,最后除以2.
- #include "bits/stdc++.h"
- using namespace std;
-
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
- int vis[200010];
- void solve()
- {
- int n,m;
- cin>>n>>m;
- vector<vector<int>> v(n+1);
- for (int i=1;i<=m;i++){
- int x,y;
- cin>>x>>y;
- v[x].push_back(y);
- v[y].push_back(x);
- }
- int ans=0;
-
- for (int i=1;i<=n;i++){
- if(vis[i]){
- continue;
- }
- queue<int> q;
- q.push(i);
- vis[i]=1;
- int cnt1=1,cnt2=0;
- while(q.size()){
- int u=q.front();
- q.pop();
- for (auto x : v[u]){
- cnt2++;
- if(vis[x]==0){
- vis[x]=1;
- cnt1++;
- q.push(x);
-
- }
-
- }
- }
-
- ans+=cnt1*(cnt1-1)-cnt2;
-
- }
- ans/=2;
- cout<<ans;
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }
- #include "bits/stdc++.h"
- using namespace std;
-
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
- int p[200010],cnt[200010];
- int find(int x)
- {
- if(p[x]!=x) p[x]=find(p[x]);
- return p[x];
- }
- void solve()
- {
- int n,m;
- cin>>n>>m;
- iota(p+1,p+n+1,1);
- for (int i=1;i<=m;i++){
- int x,y;
- cin>>x>>y;
- p[find(x)]=find(y);
- }
-
- int ans=-m;
- for (int i=1;i<=n;i++){
- cnt[find(i)]++;
- }
-
- for (int i=1;i<=n;i++){
- ans+=cnt[i]*(cnt[i]-1)/2;
- }
-
- cout<<ans;
-
-
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }
mp[n]是n的期望花费。
cost1=mp[n/a]+x。
cost2=
cost2=
- #define int long long
- #define endl '\n'
- #define IOS ios::sync_with_stdio(0),cin.tie(0);
- #define all(x) x.begin(),x.end()
- #define pi pair<int,int>
- #define vi vector<int>
- #define si set<int>
- #define mi map<int,int>
- #define mc map<char,int>
- #define YES cout<<"Yes"<<endl;
- #define NO cout<<"No"<<endl;
- template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
- template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
-
- void solve()
- {
- int n,a,x,y;
- cin>>n>>a>>x>>y;
- map<int,double> mp;
-
- auto dfs=[&](auto dfs,int u)-> double{
- if(u==0){
- return 0;
- }
- if(mp.find(u)!=mp.end()){
- return mp[u];
- }
-
- double cost1=dfs(dfs,u/a)+x;
- double cost2=0;
- for (int i=2;i<=6;i++){
- cost2+=dfs(dfs,u/i);
- }
- cost2=cost2/5+1.0*y*6/5;
-
- return mp[u]=min(cost1,cost2);
- };
- dfs(dfs,n);
- cout<<fixed<<setprecision(10)<<mp[n];
-
- }
- signed main()
- {
- IOS
- int t;
- t=1;//cin>>t;
- while(t--){
- solve();
- }
- }