题目链接:http://abc072.contest.atcoder.jp/
纪念第一次写完4道题,尽管4道都是水题。
下面上代码。
AC代码:
/*
2017年9月2日23:15:46
A
简单比较大小
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int main(){
int n,t;
scanf("%d%d",&n,&t);
if(t>=n) printf("0\n");
else printf("%d\n",n-t);
return 0;
}
/*
2017年9月2日23:15:46
B
简单输出
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int maxn=1e5+10;
char s[maxn];
int main(){
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i+=2){
printf("%c",s[i]);
} printf("\n");
return 0;
}
/*
2017年9月2日23:15:46
C
统计每一种可能性,最后取次数出现最多的。
注意-1 用另外一个数组存就行
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int b[maxn];//b[0]代表-1的个数
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<maxn;i++) a[i]=0;
b[0]=0;
int ans=0;
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(x>=1){
a[x-1]++;
a[x]++;
a[x+1]++;
ans=max(ans,max(a[x-1],max(a[x],a[x+1])));
}else{
b[0]++;
a[x]++;
a[x+1]++;
ans=max(ans,max(b[0],max(a[x],a[x+1])));
}
}
printf("%d\n",ans);
return 0;
}
/*
2017年9月2日23:15:46
D
找规律,手推几个就可以
先扫一遍,如果a[i]==i 就打个标记
然后扫一遍标记,如果出现连续s[i]不为0 记为pre[i] 为当前位置连续的几个s[i]==true 也就是 a[i]==i
如果pre[i]==1 且前后都是0 答案+1
如果pre[i]>1 且pre[i+1]=0 也就是说 当前最多连续有pre[i]的 a[i]==i
答案+ pre[i]/2 向上取整
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
bool s[maxn];
int pre[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]==i) s[i]=true;
else s[i]=false;
}
if(s[1]) pre[1]=1;
else pre[1]=0;
for(int i=2;i<=n;i++){
if(s[i]) pre[i]=pre[i-1]+1;
else pre[i]=0;
}
int ans=0;
for(int i=1;i<n;i++){
if(!pre[i]||pre[i]<pre[i+1]) continue;
else{
if(pre[i]&1) ans+=(pre[i]+1)/2;
else ans+=pre[i]/2;
}
}
/*上面的循环没有考虑到pre[n]单独拿出来考虑*/
if(pre[n]&1){
ans+=(pre[n]+1)/2;
}else if(pre[n]){
ans+=pre[n]/2;
}
printf("%d\n",ans);
return 0;
}