#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int main(){
//freopen("1.in", "r", stdin);
string a,b;
cin>>a>>b;
int ans=0;
for(int i=0;i<3;i++){
if(a[i]==b[i]) ans++;
}
cout<<ans<<endl;
return 0;
}
暴力
#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int main(){
//freopen("1.in", "r", stdin);
ll a,b;
cin>>a>>b;
for(int i=0;;i++){
if(a*i-(i-1)>=b){
cout<<i<<endl;
return 0;
}
}
return 0;
}
O ( n ) O(n) O(n)的维护最大值即可。
#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int L[N],R[N],a[N];
int main(){
//freopen("1.in", "r", stdin);
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int ans=0;
int cnt=1;
int now=a[1];
for(int i=2;i<=n;i++){
if(a[i]<=now){
cnt++;
now=a[i];
}
else{
ans=max(ans,cnt);
cnt=1;
now=a[i];
}
}
ans=max(ans,cnt);
cout<<ans-1<<endl;
return 0;
}
答案为 ( n − 1 ) ⋅ n 2 \frac{(n-1)\cdot n}{2} 2(n−1)⋅n。
#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
ll a[N];
int main(){
//freopen("1.in", "r", stdin);
ll n;
cin>>n;
n--;
cout<<n*(n+1)/2<<endl;
return 0;
}
直接用队列模拟即可。
#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
queue<int> G[N];
int maxx[N];
bool vis[N];
ll a[2000][2000];
int main(){
//freopen("1.in", "r", stdin);
ll n;
read(n);
rep(i,1,n){
maxx[i]=0;
rep(j,1,n-1){
read(a[i][j]);
G[i].push(a[i][j]);
}
}
int ans=0;
while(1){
bool flag=0;
rep(i,1,n){
if(G[i].empty()) continue;
if(G[G[i].front()].front()==i){
maxx[i]=maxx[G[i].front()]=max(maxx[i],maxx[G[i].front()])+1;
G[G[i].front()].pop();
G[i].pop();
flag=1;
}
}
if(flag==0){
cout<<-1<<endl;
return 0;
}
ll num=0;
rep(i,1,n){
num+=G[i].size();
}
if(num==0){
break;
}
}
rep(i,1,n){
ans=max(ans,maxx[i]);
}
cout<<ans<<endl;
return 0;
}
极角排序后枚举起点更新最大值。
#include
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
struct point{
double x,y;
}s[N];
bool cmp(point a,point b){
if(atan2(a.y,a.x)!=atan2(b.y,b.x)){
return atan2(a.y,a.x)<atan2(b.y,b.x);
}
return a.x<b.x;
}
int main(){
//freopen("1.in", "r", stdin);
ll n;
read(n);
rep(i,1,n){
cin>>s[i].x>>s[i].y;
}
sort(s+1,s+n+1,cmp);
rep(i,n+1,2*n) s[i]=s[i-n];
double ans=0;
rep(i,1,n){
double xx=0;
double yy=0;
rep(j,i,i+n-1){
xx+=s[j].x;
yy+=s[j].y;
ans=max(ans,xx*xx+yy*yy);
}
}
printf("%.15lf\n",sqrt(ans));
return 0;
}