学长让去做CF的题,就把前几天的那场做了两道。
508A - Pasha and Pixels:
给出nm的像素,每次选一块,变成黑色,判断有没有出现22的黑像素,输出是第几次出现的。
思路很简单,点一个判断一次就好了。一开始用关了流同步的cin和cout,运行140ms,后来换scanf和printf,运行46ms,差了3倍多。原本以为关 掉同步之后差不了多少,没想到差这么多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<cstdio> #include<cstring> const int maxn=1010; bool g[maxn][maxn]; bool judge(int a,int b){ if(g[a+1][b]&&g[a][b+1]&&g[a+1][b+1]) return 1; if(g[a+1][b]&&g[a][b-1]&&g[a+1][b-1]) return 1; if(g[a-1][b]&&g[a][b+1]&&g[a-1][b+1]) return 1; if(g[a-1][b]&&g[a][b-1]&&g[a-1][b-1]) return 1; return 0; } int main(){ int n,m,k,i; while(~scanf("%d%d%d",&n,&m,&k)){ memset(g,0,sizeof(g)); bool flag=1; for(i=0;i<k;++i){ int a,b; scanf("%d%d",&a,&b); g[a][b]=1; if(flag&&judge(a,b)){ printf("%d\n",i+1); flag=0; } } if(flag) printf("0\n"); } return 0; }
|
508B - Anton and currency you all know:
输入一个奇数,输出交换两位后最大的偶数,没有的话输出-1。
单次循环,寻找最大的位置,flag标记偶数位,flag2标记能否生成偶数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[100010]; int main(){ while(~scanf("%s",s)){ int n=(int)strlen(s); int p=0,flag=1,flag2=1; for(int i=0;i<n;++i){ if(!(s[i]&1)){ p=i,flag2=0; if(s[i]<s[n-1]){ swap(s[i],s[n-1]); flag=0; break; } } } if(flag) swap(s[p],s[n-1]); if(flag2) printf("-1\n"); else printf("%s\n",s); } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **