Codeforces Round #268 (Div. 2)
http://codeforces.com/contest/469
A 水題不解釋
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int flag[10004];
int n;
int main()
{
while(~scanf("%d",&n))
{
int x;
memset(flag,0,sizeof(flag));
scanf("%d",&x);
int c;
for(int i=0;i<x;i++)
{
scanf("%d",&c);
flag[c]=1;
}
scanf("%d",&x);
for(int i=0;i<x;i++)
{
scanf("%d",&c);
flag[c]=1;
}
int cnt=1;
for(int i=1;i<=n;i++)
{
if(flag[i]==0)
cnt=0;
}
if(cnt==1)
printf("I become the guy.\n");
else
printf("Oh, my keyboard!\n");
}
return 0;
}
B我採用的方法是:
對於 Z 的時間段,在之內的標記為1,不在之內的標記為零,求前向和,然後列舉X可能移動的位置取合適的點。
有幾點值得注意的地方參見程式碼註釋。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int p,q,l,r,a[55][2],b[55][2],sum[20005],flag[20005];//陣列要開的遠大於1000,防止求前和的時候出現陣列越界
bool judge(int t)
{
int ans=0;
for(int i=0;i<q;i++)
{
int x=b[i][0]+t;
int y=b[i][1]+t;
if(x==0)//x==0的時候要特殊考慮
ans=sum[y]-sum[x]+flag[0];
else
ans=sum[y]-sum[x-1];
if(ans>0)
return true;
}
return false;
}
int main()
{
while(~scanf("%d%d%d%d",&p,&q,&l,&r))
{
memset(flag,0,sizeof(flag));
memset(sum,0,sizeof(sum));
for(int i=0;i<p;i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
for(int j=a[i][0];j<=a[i][1];j++)
flag[j]=1;
}
sum[0]=flag[0];
for(int i=1;i<=10002;i++)//不能只僅僅到1000
sum[i]=sum[i-1]+flag[i];
int cnt=0;
for(int i=0;i<q;i++)
scanf("%d%d",&b[i][0],&b[i][1]);
for(int i=l;i<=r;i++)
{
if(judge(i))
{
//printf("(%d)\n",i);
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
C 題:求24點,遠沒有想的那麼複雜,這題就是一道找規律的題,我們可以發現,對於4一下的根本不能實現,4的時候可以4*2*3*1=24;4以後如果是偶數就是:
偶數-偶數-1=1, 偶數+2*1=偶數+2, 最後一個偶數+2換成: 1*24=24;如果是奇數,我們亦可以發現:5*4+3+2-1=24,後面的與是偶數的類似。
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int n;
int main()
{
while(~scanf("%d",&n))
{
if(n<4)
printf("NO\n");
else
{
printf("YES\n");
if(n%2==0)
{
printf("3 * 2 = 6\n");
printf("6 * 4 = 24\n");
printf("24 * 1 = 24\n");
if(n>4)
{
for(int i=5; i<n-1; i+=2)
{
printf("%d - %d = 1\n",i+1,i);
printf("1 * %d = %d\n",i+2,i+2);
}
printf("%d - %d = 1\n",n,n-1);
printf("24 * 1 = 24\n");
}
}
else
{
printf("5 * 4 = 20\n");
printf("3 + 20 = 23\n");
printf("23 - 1 = 22\n");
printf("22 + 2 = 24\n");
if(n>5)
{
for(int i=6; i<n-1; i+=2)
{
printf("%d - %d = 1\n",i+1,i);
printf("1 * %d = %d\n",i+2,i+2);
}
printf("%d - %d = 1\n",n,n-1);
printf("24 * 1 = 24\n");
}
}
}
}
return 0;
}
D題:我用bfs做的,參考了一下A過的人的想法。
剛開始把所有的數都設為A集合裡的,對於那些a-x不在A集合裡面的數我們加入佇列,定為B集合,如果b-x不在已經給出的序列中,無解。然後判斷 a - ( b - x ),如果在 加入佇列。。直到佇列為空。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
using namespace std;
map<int,int>mp;
queue<int>q;
int num[100005],a,b,n;
int main()
{
while(~scanf("%d%d%d",&n,&a,&b))
{
for(int i=0; i<n; i++)
{
scanf("%d",&num[i]);
mp[num[i]]=1;
}
while(!q.empty())
q.pop();
for(int i=0; i<n; i++)
if(!mp[a-num[i]])
q.push(num[i]);
int flag=1;
while(!q.empty())
{
int u=q.front();
q.pop();
if(mp[u]>0&&mp[a-u]==0&&mp[b-u]==0)
{
printf("NO\n");
flag=0;
break;
}
mp[u]--;
mp[b-u]--;
int cnt=a-b+u;
if(mp[cnt])
q.push(cnt);
}
if(flag==1)
{
printf("YES\n");
for(int i=0; i<n-1; i++)
{
if(mp[num[i]]==1)
printf("0 ");
else
printf("1 ");
}
if(mp[num[n-1]]==1)
printf("0\n");
else
printf("1\n");
}
}
return 0;
}
相關文章
- Codeforces Round #639 (Div. 2)
- Codeforces Round #541 (Div. 2)
- Codeforces Round #682 (Div. 2)
- Codeforces Round #678 (Div. 2)
- Codeforces Round #747 (Div. 2)
- Codeforces Round #673 (Div. 2)
- Codeforces Round #672 (Div. 2)
- Codeforces Round #448 (Div. 2) A
- Codeforces Round #217 (Div. 2)
- Codeforces Round #256 (Div. 2)
- Codeforces Round #259 (Div. 2)
- Codeforces Round #257 (Div. 2)
- Codeforces Round #258 (Div. 2)
- Codeforces Round #171 (Div. 2)
- Codeforces Round #173 (Div. 2)
- Codeforces Round 951 (Div. 2)
- Codeforces Round 955 (Div. 2)
- Codeforces Round 953 (Div. 2)
- Codeforces Round 975 (Div. 2)
- Codeforces Round 976 (Div. 2)
- Codeforces Round 972 (Div. 2)
- Codeforces Round 979 (Div. 2)
- Codeforces Round 982 (Div. 2)
- Codeforces Round 932 (Div. 2)
- Codeforces Round 934 (Div. 2)
- Codeforces Round 940 (Div. 2)
- Codeforces Round 973 (Div. 2)
- Codeforces Round 960 (Div. 2)
- Codeforces Round 958 (Div. 2)
- Codeforces Round 961 (Div. 2)
- Codeforces Round 948 (Div. 2)
- Codeforces Round 945 (Div. 2)
- Codeforces Round 873 (Div. 2)
- Codeforces Round 969 (Div. 2)
- Codeforces Round 949 (Div. 2)
- Codeforces Round 965 (Div. 2)
- Codeforces Round 963 (Div. 2)
- Codeforces Round 967 (Div. 2)