您的位置:首页 > 其它

CF CROC-MBTU 2012, Final Round div 2

2012-11-27 00:22 423 查看
最近状态好差啊。水题都A不掉了。

特别是B题,一个大水题。就是细节需要注意一下,没想到最后没过数据。。。

然后把代码改了一行就A了。。抓狂啊!!

A题。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
using namespace std;

int a[10000];
int b[10000];
void solveA()
{
int n;
cin>>n;
int num=0;
for(int i=1;i<=n;i++)
cin>>a[i];
int xx=0;
int pre=0;
for(int i=1;i<=n;i++)
{
if(a[i]<0)
{
xx++;
}
if(xx>=3)
{
b[num++]=i-1-pre;
pre+=b[num-1];
xx=1;
}
if(i==n)
{
b[num++]=i-pre;
}
}
cout<<num<<endl;
for(int i=0;i<num;i++)
cout<<b[i]<<" ";
cout<<endl;
}
int main()
{
solveA();
return 0;
}


B,这题是写的又长又臭,估计没人写的比我复杂了,恶心死我了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
using namespace std;

char a[200];
string ans[10];
void solveB()
{
int n;
cin>>n;
while(n--)
{
string x;
cin>>x;
int l=x.length();
int pos=x.find("::");
if(pos==-1)
{
int num=0;
bool flag=0;
for(int i=0; i<l; i++)
{
int index=-1;
if(x[i]==':')
{
if(flag)
cout<<":";
flag=1;
for(int j=0; j<4-num; j++)
cout<<"0";
for(int j=i-num; j<i; j++)
cout<<x[j];
num=0;
index=i;
}
else
{
num++;
}
}
cout<<":";
for(int i=0; i<4-num; i++)
cout<<0;
for(int i=l-num; i<l; i++)
cout<<x[i];
cout<<endl;
}
else
{
int sum=0;
int bre=-1;
int num=0;
for(int i=0; i<10; i++)ans[i].clear();
for(int i=0; i<l; i++)
{
if(i==pos+1)
{
bre=sum;
continue;
}
if(x[i]==':')
{
for(int j=0; j<4-num; j++)
ans[sum]+='0';
for(int j=i-num; j<i; j++)
ans[sum]+=x[j];
sum++;
num=0;
}
else
{
num++;
}
}
if(pos!=l-2)
{
for(int j=0; j<4-num; j++)
ans[sum]+='0';
for(int j=l-num; j<l; j++)
ans[sum]+=x[j];
sum++;
}
//   for(int i=0;i<sum;i++)
//  cout<<ans[i]<<endl;
if(sum)
{
bool flag=0;

for(int i=0; i<sum; i++)
{
if(i==bre)
{
for(int j=0; j<8-sum; j++)//就是这里出了问题。
{
if(flag)cout<<":";//一开始就这行写错了。。满盘皆输。。。A水题切记要仔细仔细再仔细啊!!!
flag=1;
cout<<"0000";
}
}
if(flag)
cout<<":";
flag=1;
cout<<ans[i];
}
if(pos==l-2)
for(int i=0; i<8-sum; i++)
{
if(flag)
cout<<":";
flag=1;
cout<<"0000";
}
cout<<endl;
}
else
{
cout<<"0000";
for(int i=0; i<7; i++)
cout<<":0000";
cout<<endl;
}
}

}
}
int main()
{
solveB();
return 0;
}

C,

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <stack>
#include <map>
#include <iomanip>
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
using namespace std;

int a[100005];
vector<int >aa;
int num[100005];
void solveC()
{
int n;
int k;
cin>>n>>k;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
if(a[i]!=a[i+1])
aa.push_back(a[i]);
int dd=aa.size();
//for(int i=0;i<dd;i++)
//cout<<aa[i]<<" dddd";
memset(num,0,sizeof(num));
num[aa[0]]++;//num数组记录在这一位去除这个数可以节省的步数
for(int i=1;i<dd;i++)
{
// if(aa[i]!=aa[i-1])
// num[aa[i]]++;
if(aa[i-1]==aa[i+1])//如果这一位的前后两位相等,那么去除这一位可以节省2步 例如2,1,2这时去除中间的1可以节省2步
num[aa[i]]+=2;
else num[aa[i]]++;//否则去除这一位只能节省一步
}
//for(int i=1;i<=k;i++)
//cout<<num[i]<<"ddddd";
int max1=-inf,ans=inf;
for(int i=1;i<=k;i++)// 然后找哪一位去除的步数最多,找到字典序最小的即可
{
if(num[i]>max1)
{
max1=num[i];
ans=i;
}
else if(num[i]==max1)
{
if(ans>i)
ans=i;
}
}
cout<<ans<<endl;
}
int main()
{
solveC();
return 0;
}


D

E
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: