比赛的时候打了3题,由于手残加各种奇葩傻逼错误,最后竟被hack剩1题,立个flag标志一下!!!
题目传送门:
http://codeforces.com/problemset/problem/610/A
既然忘记判断筷子是奇数的情况了,一定要注意特判n小以及待处理表达式是否满足的情况,即遇到除以2的时候就一定要想到奇偶的问题
int main()
{
s(n);
if(n<6||n&1)
{
puts("0");return 0;
}
n/=2;
p((n-1)/2);
return 0;
}
传送门:
http://codeforces.com/problemset/problem/610/B
首先都减到0,然后再找间隔最长的两个,刚开始忘记开2倍 runtime error了,然后inf又开成999999999了,导致1e9的时候wrong了,都是sb错误,手太残了
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<stdlib.h>
#include<vector>
#include<map>
#include<string>
using namespace std;
#define ll long long
#define For(i,n) for(int i=1;i<=n;i++)
#define Dor(i,n) for(int i=n;i>=1;i--)
#define s(n) scanf("%d",&n)
#define p(n) printf("%d\n",n)
//#define maxn 200000+10
#define ms(n) memset(n,0,sizeof(n))
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const double eps=1e-8;
const int inf=0x3f3f3f3f;
const int maxn=2e5+10;
int n;
int a[2*maxn];
ll sum=0;
int main()
{
s(n);
//1000000000
int minn=1000000000;int minpos;
//int
for(int i=0;i<n;i++)
{
s(a[i]);
if(a[i]<=minn)
{
minn=a[i];
minpos=i;
}
}
for(int i=n;i<2*n;i++)
{
a[i]=a[i-n];
}
int summ=0;int maxx=0;
int flag=0;
for(int i=0;i<2*n;i++)
{
if(a[i]==minn)
{
flag=1;
if(summ>maxx)
{
maxx=summ;
}
summ=0;
}
else if(flag) summ++;
}
sum+=1ll*minn*n;
sum+=maxx;
printf("%I64d\n",sum);
return 0;
}
传送门:http://codeforces.com/contest/610/problem/C
构造n维向量使得两两相乘代数和为0
递推解决,根据n构造n+1时候的方案
so easy 的证明:
左上不变,右上为左上取反
因为这样可以保证左半为0,右半也为0
然后根据思维的对称性,左下和右下与上面的乘积为0的原因一定是一正一负造成的,因此左下与左上一样,右下为右上取反即可以了
就能保证左正右负
写的时候一定要注意循环的次数,且向这种n很小的题目,一定要注意把所有情况都试一遍
constructive method
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<stdlib.h>
#include<vector>
#include<map>
#include<string>
using namespace std;
#define ll long long
#define For(i,n) for(int i=1;i<=n;i++)
#define Dor(i,n) for(int i=n;i>=1;i--)
#define s(n) scanf("%d",&n)
#define p(n) printf("%d\n",n)
//#define maxn 200000+10
#define ms(n) memset(n,0,sizeof(n))
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const double eps=1e-8;
const int inf=0x3f3f3f3f;
const int maxn=1e5+10;
int n;
int a[2010][2010];
int main()
{
s(n);
a[1][1]=1;a[1][2]=1;
a[2][1]=1;a[2][2]=-1;
for(int i=2;i<=(1<<n);i*=2)
{
for(int k=1;k<=i;k++)
{
for(int j=i+1;j<=2*i;j++)
{
a[k][j]=-a[k][2*i+1-j];
}
}
for(int k=i+1;k<=2*i;k++)
{
for(int j=1;j<=i;j++)
{
a[k][j]=a[k-i][j];
}
}
for(int k=i+1;k<=2*i;k++)
{
for(int j=i+1;j<=2*i;j++)
{
a[k][j]=a[k][2*i+1-j];
}
}
}
for(int i=1;i<=(1<<n);i++)
{
for(int j=1;j<=(1<<n);j++)
{
if(a[i][j]==1) printf("+");
else printf("*");
}
printf("\n");
}
return 0;
}