2010年全国大学生程序设计邀请赛(福州)
FZU 1909
A | 水题 | 0:04:35 1Y |
#include <iostream>
#include <cstdio>
using namespace std;
int a[4];
int main()
{
//freopen("/home/moor/Code/input.txt","r",stdin);
int ncase;
scanf("%d",&ncase);
for(int h=1;h<=ncase;++h)
{
bool flag=0;
int sum=0;
for(int i=0;i<4;++i)
scanf("%d",&a[i]),sum+=a[i];
for(int i=0;i<4;++i)
for(int j=i+1;j<4;++j)
if((a[i]+a[j])*2==sum)
flag=1;
printf("Case %d: %s\n",h,flag?"Yes":"No");
}
}
E | 水题 | 0:08:28 1Y |
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
int a[4];
int main()
{
//freopen("/home/moor/Code/input.txt","r",stdin);
int ncase,len;
string a,b;
scanf("%d",&ncase);
for(int h=1;h<=ncase;++h)
{
int ans = 0;
cin>>len>>a;
b = a;
sort(b.begin(),b.end());
for(int i = 0; i < len; i++)
if(a[i]!=b[i]) ans++;
printf("Case %d: %d\n",h,ans);
}
}
F | 杂题,线性扫描一遍数组 | 1:19:16 5Y |
0:27:40:TLE,用了cin,cout忘记改回来了 | ||
0:30:10:WA | ||
1:06:47:TLE,补了一个坑,结果死循环了 | ||
1:08:48:WA,找到死循环的地方了,改了就交了==,中间竟然就隔了两分钟,速度好快的说 | ||
1:19:16:AC,Moor出了组数据找到了坑 | ||
好吧,其实这道题还是可以少点罚时的 |
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#define MAXN 500010
using namespace std;
int a[MAXN];
bool vi[MAXN];
int main()
{
//freopen("/home/moor/Code/input.txt","r",stdin);
int ncase,n,ans;
long long prev;
scanf("%d",&ncase);
for(int h=1;h<=ncase;++h)
{
bool flag=0,f3;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&a[i]),flag|=(a[i]<0);
for(int i=0;i<n;++i)
vi[i]=1;
ans=0;
f3=0;
for(int i=n-1,j;flag;)
{
prev=0;
j=i;
while(1)
{
prev+=a[j];
if(prev>0) break;
else if(vi[j])
vi[j]=0,f3=0;
--j;
if(j<0)
j=n-1;
}
i=j;
while(a[i]>0||!vi[i])
{
--i;
if(i<0)
{
if(f3)
{
flag=0;
break;
}
else f3=1;
i=n-1;
}
}
}
for(int i=0;i<n;++i)
ans+=(vi[i]>0);
printf("Case %d: %d\n",h,ans);
}
}
L | 扫雷模拟,稍难的水题 | 0:44:15 1Y |
Moor卡F题的时候发现L题有人过了,我检查F题, Moor和hq看L,配合的还是不错的 |
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <queue>
#include <cstring>
#define MAXN 110
#define MP(x,y) make_pair((x),(y))
#define FI first
#define SE second
using namespace std;
const int dir[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};
char ma[MAXN][MAXN];
void bfs(int x,int y)
{
queue<pair<int,int> >que;
que.push(MP(x,y));
while(que.size())
{
x=que.front().FI,y=que.front().SE;
que.pop();
if(ma[x][y]!='0')
{
ma[x][y]='*';
continue;
}
ma[x][y]='*';
for(int i=0;i<8;++i)
que.push(MP(x+dir[i][0],y+dir[i][1]));
}
}
int main()
{
//freopen("/home/moor/Code/input.txt","r",stdin);
int ncase,n,ans;
scanf("%d",&ncase);
for(int h=1;h<=ncase;++h)
{
scanf("%d",&n);
memset(ma,0,sizeof(ma));
for(int i=1;i<=n;++i)
scanf("%s",&ma[i][1]);
ans=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(ma[i][j]=='0')
bfs(i,j),++ans;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(ma[i][j]>='1'&&ma[i][j]<='8')
++ans;
printf("Case %d: %d\n",h,ans);
}
}
/***然后我们又出不来题了***/ | ||
开了C,K,J题,三题都有人过,但是都略难敲 |
C | 构造题 | 真的好水的,一定是我脑子抽风了,幸亏后来上了个厕所回来发现打的表的规律了, 感觉这种构造题比较像CF的风格(比赛上厕所很重要的!) |
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#define MAXN 2000010
#define EPS 1e-6
#define MP(x,y) make_pair((x),(y))
#define FI first
#define SE second
using namespace std;
void mul(int a[2][2],int b[2][2],int mod)
{
int tmp[2][2]={{0}};
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
for(int k=0;k<2;++k)
tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j])%mod;
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
a[i][j]=tmp[i][j];
}
void exp_mod(int ans[2][2],int p,int mod)
{
int a[2][2]={{0}};
a[0][0]=a[0][1]=a[1][0]=1;
for(int i=0;i<2;++i)
for(int j=0;j<2;++j)
ans[i][j]=0;
ans[0][0]=ans[1][1]=1;
while(p)
{
if(p&1) mul(ans,a,mod);
p>>=1;
mul(a,a,mod);
}
}
int main()
{
//freopen("/home/moor/Code/input.txt","r",stdin);
int ncase,n, m;
scanf("%d",&ncase);
for(int h=1;h<=ncase;++h)
{
scanf("%d %d", &n, &m);
int tmpm[2][2]={{0}},tmp2[2][2];
tmpm[0][0]=tmpm[1][0]=1;
exp_mod(tmp2,n,m);
mul(tmp2,tmpm,m);
int l=(tmp2[0][0]-1+m)%m;
printf("Case %d: ",h);
if (l%2==0&&l!=0)
{
printf("Yes\n");
for (int i=1; i<=l/2; i++)
{
printf("-1");
for (int j=2; j<=l-i+1; j++)
printf(" -1");
for (int j=l-i+2 ;j<=l; j++)
printf(" 0");
printf("\n");
}
for (int i=1; i<=l/2; i++)
{
printf("0");
for (int j=2; j<=l/2-i+1; j++)
printf(" 0");
for (int j=l/2-i+2; j<=l; j++)
printf(" 1");
printf("\n");
}
}
else printf("No\n");
}
return 0;
}
K | 数学题+JAVA题 算k路归并排序的最坏时间 | 式子写出来不难,难的是JAVA,我们要准备一本人民群众喜闻乐见的JAVA用书 先T了一炮是因为没用map(其实明明知道会T的,只是想刷刷存在感) |
import java.text.Bidi;
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
//int[] num = new int[500];
static int cas,m;
static BigInteger n,a;
static TreeMap<BigInteger, BigInteger> ma=new TreeMap<BigInteger, BigInteger>();
public static BigInteger solve(BigInteger x)
{
if(ma.get(x)!=null)
return ma.get(x);
if(a.compareTo(x)>=0)
{
BigInteger tmp=x;
x=x.subtract(BigInteger.ONE).multiply(x).divide(BigInteger.valueOf(2));
ma.put(tmp, x);
return x;
}
else
{
BigInteger tmp = BigInteger.ZERO;
if(x.mod(a).compareTo(BigInteger.ZERO)!=0)
tmp=tmp.add(x.mod(a).multiply(solve(x.divide(a).add(BigInteger.ONE))));
tmp=tmp.add(a.subtract(x.mod(a)).multiply(solve(x.divide(a))));
tmp=tmp.add(x.mod(a).multiply(a.subtract(BigInteger.ONE)));
tmp=tmp.add(a.subtract(BigInteger.ONE).multiply(x.divide(a).subtract(BigInteger.ONE)).multiply(a));
tmp=tmp.add(BigInteger.valueOf(m*(m-1)/2));
ma.put(x,tmp);
return tmp;
}
}
public static void main(String[] args){
Scanner cin = new Scanner (new BufferedInputStream(System.in));
cas = cin.nextInt();
for(int ca = 1; ca<=cas; ca++)
{
n = cin.nextBigInteger();
m = cin.nextInt();
a = BigInteger.valueOf(m);
ma.clear();
System.out.printf("Case %d: ",ca);
System.out.println(solve(n));
}
}
}
/*赛后过的题*/
J | 计算几何 | Moor想试试,反正没有人敲题,所以我们队敲的第五题就是这道题==, 然后就没有然后了,赛后曹家浩他们队好像过了 |