链接:戳这里
题意:看了好久才反应过来,然后将字母表剩下的没有使用过的字母按照顺序在其后进行排列。 这句话很关键啊
思路:直接从后往前枚举到不能按照顺序就输出就可以了,注意如果全是逆序直接输出a[1]
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include <ctime> #include<queue> #include<set> #include<map> #include<stack> #include<iomanip> #include<cmath> #define mst(ss,b) memset((ss),(b),sizeof(ss)) #define maxn 0x3f3f3f3f #define MAX 1000100 ///#pragma comment(linker, "/STACK:102400000,102400000") typedef long long ll; typedef unsigned long long ull; #define INF (1ll<<60)-1 using namespace std; int n; int a[10010]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int m=n; while(a[m]>a[m-1]) m--; if(m==0) { cout<<a[1]<<endl; return 0; } m--; for(int i=1;i<m;i++) cout<<a[i]<<" "; cout<<a[m]<<endl; return 0; }
题意:中文题
思路:分别用sqrt(n||m)求出n,m约数个数 和 n,m的相同的约数个数 除一下gcd() 就是答案了
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include <ctime> #include<queue> #include<set> #include<map> #include<stack> #include<iomanip> #include<cmath> #define mst(ss,b) memset((ss),(b),sizeof(ss)) #define maxn 0x3f3f3f3f #define MAX 1000100 ///#pragma comment(linker, "/STACK:102400000,102400000") typedef long long ll; typedef unsigned long long ull; #define INF (1ll<<60)-1 using namespace std; ll n,m; ll gcd(ll a,ll b){ if(b==0) return a; return gcd(b,a%b); } int main(){ cin>>n>>m; ll s1=0,s2=0,s3=0; if(n>m) swap(n,m); for(ll i=1;i*i<=n;i++){ if(n%i==0){ s1++; if(n/i!=i) { s1++; } } } for(ll i=1;i*i<=m;i++){ if(m%i==0){ s2++; if(m/i!=i) s2++; } } for(ll i=1;i*i<=n;i++){ if(n%i==0 && m%i==0){ s3++; ll tmp=n/i; if(tmp!=i && m%tmp==0) s3++; } } ll t=gcd(s3,s1*s2); cout<<s1*s2/t<<" "<<s3/t<<endl; return 0; }