传送门
题意:求 ∑ i = 1 n i \sum\limits_{i=1}^n i i=1∑ni
思路:签到题,直接按照公式输出 n ( n + 1 ) 2 \dfrac{n(n+1)}{2} 2n(n+1)。
时间复杂度: O ( 1 ) O(1) O(1)
#include
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair
#define fi first
#define se second
int main(){
int n;
cin>>n;
cout<<n*(n+1)/2;
return 0;
}
思路:按照题意模拟,用一个字符串数组维护即可。
时间复杂度: O ( n ) O(n) O(n)
#include
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair
#define fi first
#define se second
char ans[N];
int main(){
string s;
cin>>s;
int n=s.size();
int x=0;
for(int i=0;i<n;i++){
if(s[i]=='0') ans[++x]='0';
else if(s[i]=='1') ans[++x]='1';
else if(s[i]=='B'&&x){
x--;
}
}
for(int i=1;i<=x;i++) cout<<ans[i];
cout<<ans;
return 0;
}
思路:因为数据只有 100 100 100,范围很小,直接暴力枚举即可。
时间复杂度: O ( 100 n ) O(100n) O(100n)
#include
using namespace std;
typedef long long ll;
const int N=105+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair
#define fi first
#define se second
int a[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int ans=1e9;
for(int i=-100;i<=100;i++){
int sum=0;
for(int j=1;j<=n;j++){
sum+=(i-a[j])*(i-a[j]);
}
ans=min(ans,sum);
}
cout<<ans;
return 0;
}
思路:居然是个思维题。。其实我们只需要直到 X X , X Y X XX,XYX XX,XYX类型的字符串即可。
证明:假设不存在 X X , X Y X XX,XYX XX,XYX即两个相同字母间最少间隔两个字符。
所以字符串应该是这样的形式: A X Y A X Y A X Y A AXYAXYAXYA AXYAXYAXYA
因为前四个字母不是满足条件的,所以每次加一个 A A A,都至少要加个两个其他的字母 X Y XY XY,所以永远也不可能满足条件的。
若存在 X X , X Y X XX,XYX XX,XYX这样的字符串即这样的字符串就是答案。
所以存在 X X , X Y X XX,XYX XX,XYX是满足答案的充要条件。
所以顺序遍历判断即可。
时间复杂度: O ( n ) O(n) O(n)
#include
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair
#define fi first
#define se second
char a[N];
int main(){
scanf("%s",a);
int l=strlen(a);
for(int i=0;i<l-1;i++){
if(a[i]==a[i+1]){
printf("%d %d\n",i+1,i+2);
return 0;
}
if(a[i]==a[i+2]){
printf("%d %d\n",i+1,i+3);
return 0;
}
}
puts("-1 -1");
return 0;
}