CF contest/389

来源:互联网 发布:明山控股集团知乎 编辑:程序博客网 时间:2024/05/16 14:36

A. Fox and Number Game

题意;n个数,She can do the following operation as many times as needed: select two different indexes i and j such that xi > xj hold, and then apply assignment xi = xi - xj. The goal is to make the sum of all numbers as small as possible. 输出最终n个数的sum.

过年几天没有刷过题,然后这个题感觉自己想法有点奇葩……但还不知道别人正解是什么

先找到这N个数的最大公因数,最大公因数*n就是sum.

B. Fox and Cross

题意: 看n*n 的格子里,凡是出现#是否都是在“十字架”图案上。

一开始还以为题目很难。怎么Dfs都感觉不太对的样子。但仔细想想,从中间那个点开始计算就没有问题。如果一个#的四周有#,那么这个5个#必定是合法的。


C. Fox and Box Accumulation

题意: 给N个数字,问需要多少个队列。直接模拟就好。

用ans数组去记录当前第j队列已经放进去几个了。当某一boxes的值大于某一队列(记为ans[j])的数量,则可以放进去,ans[j]++就好,如果当前全部队列都不可以放,那重新开一个队列。

还差 D,E……

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[110];int vis[110];int main(){    freopen("in.txt","r",stdin);    int n;    while(~scanf("%d",&n))    {        for(int i=0;i<n;i++)        scanf("%d",&a[i]);        sort(a,a+n);        int ans=0;        memset(vis,0,sizeof(vis));        for(int i=0;i<n;i++)        {            for(int j=1;j<=a[i];j++)             if(a[i]%j==0) vis[j]++;        }        for(int i=a[0];i>0;i--)         if(vis[i]==n) {printf("%d\n",i*n);break;}    }    return 0;}

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n;char pos[110][110];int cnt;void change(int x,int y){    for(int i=x-1;i<=x+1;i++)     pos[i][y]='.';    for(int i=y-1;i<=y+1;i++)     pos[x][i]='.';}bool OK(int x,int y){    for(int i=x-1;i<=x+1;i++)     if(pos[i][y]!='#') return 0;    for(int i=y-1;i<=y+1;i++)      if(pos[x][i]!='#') return 0;    return 1;}bool deal(){    if(cnt%5)return 0;    cnt/=5;    int ans=0;    for(int i=0;i<n;i++)     for(int j=0;j<n;j++)      if(pos[i][j]=='#'&&OK(i,j))         {             ans++;             change(i,j);         }    if(ans==cnt) return 1;    else return 0;}int main(){     //freopen("in.txt","r",stdin);     while(~scanf("%d",&n))     {        for(int i=0;i<n;i++) scanf("%s",pos[i]);        cnt=0;        for(int i=0;i<n;i++)         for(int j=0;j<n;j++)            if(pos[i][j]=='#')cnt++;        if(deal()) printf("YES\n");        else printf("NO\n");     }    return 0;}

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int n;int x[110];int ans[110];int main(){     freopen("in.txt","r",stdin);     while(~scanf("%d",&n))     {         for(int i=0;i<n;i++)          scanf("%d",&x[i]);         sort(x,x+n);         int cnt=1;         ans[cnt]=1;         for(int i=1;i<n;i++)         {            int ok=1;            for(int j=1;j<=cnt;j++)             if(x[i]>=ans[j]) {ans[j]++;ok=0;break;}            if(ok) ans[++cnt]=1;         }         printf("%d\n",cnt);     }    return 0;}


0 0
原创粉丝点击