[蓝桥杯][2013年第四届真题]幸运数
30 69
8
具体用到了对vector数组的操作
#include <iostream> #include<bits/stdc++.h> using namespace std; vector<int>a; int del(int i) { int j=a[i],v=a[i]; int n=a.size(); while(j<n) { j+=v; } for(int k=j-v;k>=v;k-=v) a.erase(a.begin()+k); } int main() { int m,n,i; cin>>m>>n; for(i=0;i<n;i++) a.push_back(i); del(2); for(i=2;i<n;i++) del(i); int ans=0; for(i=0;i<a.size();i++) { if(a[i]>m) ans++; } cout<<ans<<endl; return 0; }
问题 1456: [蓝桥杯][历届试题]连号区间数
5 3 4 2 5 1
9
很巧妙的一种思维方式
#include <iostream> #include<bits/stdc++.h> using namespace std; int a[50005]; int main() { int n,i,j; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; int ans=0; for(i=1;i<=n;i++) { int minn=50005,maxx=0; for(j=i;j<=n;j++) { if(a[j]>maxx) maxx=a[j]; if(a[j]<minn) minn=a[j]; if(maxx-minn==abs(j-i)) { ans++; } } } cout<<ans<<endl; return 0; }
完美的代价
5 mamad
3
利用贪心的思想,将每个遍历的字符找到后面与他相同的然后交换到正确的位置时所需的交换次数,if(k==i)说明没有找到与a[i]相同的字符
#include <iostream> #include<bits/stdc++.h> using namespace std; int vis[26]; int main() { int n,i,k; cin>>n; string s; cin>>s; int j=n-1; int flag=0; int cnt=0; for(i=0;i<j;i++) { for(k=j;k>=i;k--) { if(k==i) { if(n%2==0||flag) { cout<<"Impossible"<<endl; return 0; } flag=1; cnt+=n/2-i; } else if(s[i]==s[k]) { for(int v=k;v<j;v++) { swap(s[v],s[v+1]); cnt++; } j--; break; } } } cout<<cnt<<endl; return 0; }
原文:https://www.cnblogs.com/kepa/p/10461754.html