C、Grid game
题意:给你一个4 × 4 的方格,然后给你一些1 × 2 或者 2 × 1的小方格,当这些方格在一行或者一列的时候会消除掉,问最佳放置位置。
思路:QAQ,什么时候思维会变强一些。选定一些地方,只放这几个地方就可以了。两个 flag ,分别是放置行和列的标记,如果没放之前,假设先来到是竖的, 所以先放到上面位置 [ 1 , 4 ],如果再来一个竖的,那么就可以放到下面消掉了,即位置是 [ 3, 4 ]。如果来的不是竖的,而是横的,我们可以放到 [ 4 , 1 ] 或者 [ 4 , 3 ],为了防止后来的第三个可能是竖的,如果放在 [ 4 , 3 ] 没法消掉,所以先放到前面就可以避免了。
代码:
代码语言:javascript复制#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char s[2000];
int main()
{
while(~scanf("%s", s))
{
int len = strlen(s);
bool h,l;
h = false;
l = false;
for(int i = 0; i < len; i )
{
if(s[i] == '0')
{
if(l)
{
printf("3 4n");
l = false;
}
else
{
printf("1 4n");
l = true;
}
}
else if(s[i] == '1')
{
if(h)
{
printf("4 3n");
h = false;
}
else
{
printf("4 1n");
h = true;
}
}
}
}
return 0;
}
B、 Game with string
栈模拟。
代码语言:javascript复制#include <bits/stdc .h>
using namespace std;
typedef long long ll;
char s[200000];
int main()
{
while(~scanf("%s", s)){
int i = 0;
int j = 1;
int pos = 1;
bool flag = false;
int len = strlen(s);
stack<char>st;
while(1){
flag = false;
for(i = 0 ; i < len; i ){
if(st.empty()){
st.push(s[i]);
}
else {
if(s[i] == st.top()){
pos = -pos;
st.pop();
flag = true;
}
else {
st.push(s[i]);
}
}
}
for(len = 0;!st.empty(); len ){
s[len] = st.top();
st.pop();
}
if(!flag) break;
}
if(pos == 1)printf("Non");
else printf("Yesn");
}
return 0;
}
A. Splitting into digits
代码语言:javascript复制#include <bits/stdc .h>
using namespace std;
typedef long long ll;
int main()
{
int n;
while(scanf("%d", &n) != EOF){
printf("%dn",n);
for(int i = 0; i < n - 1; i )printf("1 ");
printf("1n");
}
return 0;
}