A. Gravity Flip
http://codeforces.com/problemset/problem/405/A
和2048好像啊,把格子向右移,排个升序就OK啦
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#include<cctype>
#include<cmath>
#include<string>
#include<cstring>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define sqr(x) (x)*(x)
#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.14159265358979
#define eps 1e-10
#define mm
using namespace std;
int a[1000];
int main()
{
#ifndef ONLINE_JUDGE
freopen("t","r",stdin);
#endif
int n;
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
for (int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
B. Domino Effect
http://codeforces.com/problemset/problem/405/B
给出骨牌和推倒方向,求最后剩余的竖直骨牌,从左往右遍历一遍R,L内区间长度为奇数则+1
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#include<cctype>
#include<cmath>
#include<string>
#include<cstring>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define sqr(x) (x)*(x)
#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.14159265358979
#define eps 1e-10
#define mm
using namespace std;
int n;
char s[3333];
int ans=0;
int temp=0;//当前区间内暂时竖直的骨牌数量
bool R;
int main()
{
#ifndef ONLINE_JUDGE
freopen("t","r",stdin);
#endif
scanf("%d%s",&n,s);
R=false;
for (int i=0;i<n;i++)
{
if (s[i]=='.')
{
temp++;
}
else
{
if (s[i]=='L')
{
if (R)
{
ans+=(temp%2);
temp=0;
}
else
{
temp=0;
}
R=false;
}
else
{
ans+=temp;
temp=0;
R=true;
}
}
}
if (!R)
ans+=temp; //见第二个样例
printf("%d\n",ans);
return 0;
}
C. Unusual Product
http://codeforces.com/problemset/problem/405/C
给出一个n×n的矩阵,它的值为对应行向量点乘对应列向量模2
有两种变换,1 将第i行中的0变为1,1变为0, 2将第i列中的0变为1,1变为0
求矩阵变换后对应的值
这个数据规模下,模拟肯定是要超时的,想想矩阵的变换,再想想模2后的值只有0和1两种,显然每次变换后矩阵的值k^=1
一开始没看到题目中对flip的解释,搞了好久。。。。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#include<cctype>
#include<cmath>
#include<string>
#include<cstring>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define sqr(x) (x)*(x)
#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.14159265358979
#define eps 1e-10
#define mm
using namespace std;
int n,t,q1,q2;
int matrix[1001][1001];
void de()
{
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
printf("%d",matrix[i][j]);
}
puts("");
}
puts("___________________");
}
int cal()
{
int sum=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
sum+=(matrix[i][j]*matrix[j][i]);
}
}
return sum%2;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("t","r",stdin);
#endif
scanf("%d",&n);
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
scanf("%d",&matrix[i][j]);
}
}
scanf("%d",&t);
int k=cal();
for (int i=0;i<t;i++)
{
scanf("%d",&q1);
if (q1==3)
{
printf("%d",k);
}
if (q1==1)
{
scanf("%d",&q2);
q2--;
/*
for (int j=0;j<n;j++)
{
matrix[q2][j]=1^matrix[q2][j];
}
*/
k=k^1;
//de();
}
if (q1==2)
{
scanf("%d",&q2);
q2--;
/*
for (int j=0;j<n;j++)
{
matrix[j][q2]=1^matrix[j][q2];
}
*/
k=k^1;
//de();
}
}
return 0;
}