Codeforces Round #238 (Div. 2)前3题解题报告

来源:互联网 发布:js window.open 编辑:程序博客网 时间:2024/05/24 03:22

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 mmusing namespace std;int a[1000];int main(){#ifndef ONLINE_JUDGEfreopen("t","r",stdin);#endifint 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 mmusing namespace std;int n;char s[3333];int ans=0;int temp=0;//当前区间内暂时竖直的骨牌数量bool R;int main(){#ifndef ONLINE_JUDGEfreopen("t","r",stdin);#endifscanf("%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 mmusing 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_JUDGEfreopen("t","r",stdin);#endifscanf("%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;}


1 0
原创粉丝点击