比赛的时候写了的三个 结果后两个WA(捂脸)
看到是等差数列减去等差数列立马想到了高中的方法 c++写了一遍 突然发现 诶尼玛这是1e15啊..等差数列公式超了啊 - -
于是因为cf的oj很*于是python2.7 A了
n=input() n2=n/2 n1=n2+n%2 s1n=n1+n1*(n1-1)*2/2 s2n=n2*2+n2*(n2-1)*2/2 print s2n-s1n
结果第二天发现别人是这么想的
sum= ( n + 1 ) / 2 * ( n & 1 ? - 1 : 1 );
瞬间感觉自己要吃药了..
比赛的时候是这么想的定义一个行数组 r[] 一个列数组 c[]
然后 扫一遍矩阵 if( ! B[ i ] [ j ] ) 那么 r[i]=1 和 c[j]=1 就是划掉 r[i] c[j]
再扫一遍矩阵 if( B [ i ] [ j ] && r[i]&& r[j] ) 答案为"NO" 因为行列都被划了
都满足输出YES 再扫一遍 输出矩阵A if( r [ i ] || c [ j ] ) output 0 else output 1
当时木有发现一个bug 列如:
0 0 0
1 1 1
这时候 r[1] c[1] c[2] c[3] 为 1 r[2] 为 0 但是未考虑 c[1~3] 都被划了 r[2]也应为 1 傻*了 - -
第二天说起这道题 队友跟我说了三个字纯暴力 - -
就是定义一个新矩阵 要划的时候真的一个个赋值 ..
好吧你赢了
#include <cstdio> #include <cstring> #include <algorithm> #define CLR(a) memset(a,0,sizeof(a)) #define debug \ for(int i=0;i<m;i++){\ for(int j=0;j<n;j++)\ printf("%d ",A[i][j]);\ puts("");\ }\ puts(""); using namespace std; const int MAXN = 1010; int A[MAXN][MAXN],B[MAXN][MAXN]; bool ck(int x,int y,int m,int n) { for(int i=0;i<m;i++) if(A[i][y]) return 1; for(int i=0;i<n;i++) if(A[x][i]) return 1; return 0; } int main() { int m,n; scanf("%d%d",&m,&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { scanf("%d",&B[i][j]); A[i][j]=1; } for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(!B[i][j]) { CLR(A[i]); for(int _=0;_<m;_++) A[_][j]=0; } //debug; } int ans=1; for(int i=0;i<m&&ans;i++) for(int j=0;j<n;j++) { if(B[i][j]&&!ck(i,j,m,n)) ans=0; } if(ans) { puts("YES"); for(int i=0;i<m;i++,puts("")) for(int j=0;j<n;j++) printf("%d ",A[i][j]); } else puts("NO"); return 0; }
这题感觉很高大上其实还是简单小模拟
题意是把字符串变成回文要几步操作
有几个规律可以简化程序:
1.设n =9 p=8 其实等于 p=2 = n-p+1
2.当p 位于前半段(包括中间元素) 在前半段操作数<=在后半段的操作数
3.不用改变的地方可能不用去(废话,某些时候也是有用的)
但是比赛的时候没时间了TAT
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAXN = 1e5; char s[MAXN+10]; int sum[MAXN+10]; int main() { //freopen("c.in","r",stdin); int n,m; scanf("%d%d",&n,&m); scanf("%s",s+1); int l=1,r=n/2+n%2,ans=0; if(m>r) m=n-m+1; int dl=-1,dr=0; for(int i=l;i<=r;i++) { int t=min(abs(s[i]-s[n-i+1]),26-abs(s[i]-s[n-i+1])); ans+=t; if(!t&&dl) dl+=(~dl)?1:2,l++; else dl=0; if(!t) dr++; else dr=0; } r-=dr; if(l>r) l=r=m; printf("%d",ans+min(abs(l-m),abs(r-m))+r-l); return 0; }
-------水线-------
选修课讲的挺有意思的 立体声的组成
听着听着就睡着了 TAT
结果在实验室根本动不起来 就把白天补的两道粘上来了..