比赛的时候写了的三个 结果后两个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;
}
C. Palindrome Transformation
这题感觉很高大上其实还是简单小模拟
题意是把字符串变成回文要几步操作
有几个规律可以简化程序:
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
结果在实验室根本动不起来 就把白天补的两道粘上来了..