注:有的题(第三个)并没有ac,先放个错误答案。以及好多细节处理的并不好
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
typedef pair<int,int> PII;
int row1[6],col1[6],a1,b1; //行、列、主对角线、次对角线.
int row2[6],col2[6],a2,b2; //行、列、主对角线、次对角线.
map<int,PII> mp1,mp2;
string s[27];
void solve(){
memset(row1,0,sizeof row1);
memset(row2,0,sizeof row2);
memset(col1,0,sizeof col1);
memset(col2,0,sizeof col2);
a1 = 0,b1 = 0,a2 = 0,b2 = 0;
string ss;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin >> ss;
int x = (ss[0]-'0')*10+(ss[1]-'0');
mp1[x] = make_pair(i,j);
// cout << x << " ";
}
// cout << endl;
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin >> ss;
int x = (ss[0]-'0')*10+(ss[1]-'0');
mp2[x] = make_pair(i,j);
// cout << x << " ";
}
// cout << endl;
}
for(int i=0;i<25;i++) cin >> s[i];
// for(int i=0;i<25;i++){
// ss = s[i];
// int x = (ss[0]-'0')*10+(ss[1]-'0');
// cout << x << " ";
// }
bool f1 = 0,f2 = 0;
for(int i=0;i<25;i++){
ss = s[i];
int x = (ss[0]-'0')*10+(ss[1]-'0');
if(++row1[mp1[x].first]==5){
f1 = 1;
}
if(++col1[mp1[x].second]==5){
f1 = 1;
}
if(mp1[x].first==mp1[x].second){
a1++;
if(a1==5) f1 = 1;
}
if(mp1[x].first+mp1[x].second==5){
b1++;
if(b1==5) f1 = 1;
}
if(++row2[mp2[x].first]==5){
f2 = 1;
}
if(++col2[mp2[x].second]==5){
f2 = 1;
}
if(mp2[x].first==mp2[x].second){
a2++;
if(a2==5) f2 = 1;
}
if(mp2[x].first+mp2[x].second==5){
b2++;
if(b2==5) f2 = 1;
}
if(f1 || f2) break;
}
if(f1==1&&f2==1) puts("0");
else if(f1==1) puts("1");
else if(f2==1) puts("2");
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
solve();
}
return 0;
}
// 71*71
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[80][80];
void solve(){
for(int i=0;i<=80;i++)
for(int j=0;j<=80;j++)
s[i][j] = '.';
string ss;
cin >> ss;
int len = ss.size();
s[36][36] = ss[0];
// // 按照右上左下的顺序
int i = 36,j = 36;
int d = 4; // 1,2,3,4分别代表右上左下
for(int k=1;k<len;k++){
if(d==4){
if(s[i][j+1]!='.'){
//向下走.
s[++i][j] = ss[k];
}else{
//向右走.
d = 1;
s[i][++j] = ss[k];
}
}else if(d==1){
if(s[i-1][j]!='.'){
//向右走.
s[i][++j] = ss[k];
}else{
//向上走.
d = 2;
s[--i][j] = ss[k];
}
}else if(d==2){
if(s[i][j-1]!='.'){
//向上走.
s[--i][j] = ss[k];
}else{
//向左走.
d = 3;
s[i][--j] = ss[k];
}
}else if(d==3){
if(s[i+1][j]!='.'){
//向左走.
s[i][--j] = ss[k];
}else{
//向下走.
d = 4;
s[++i][j] = ss[k];
}
}
}
// for(int i=30;i<=40;i++){
// for(int j=30;j<=40;j++)
// printf("%c",s[i][j]);
// printf("\n");
// }
// cout << "d=" << d << endl;
// 右上左下.
//
if((s[i-1][j-1]!='.'&&s[i+1][j-1]!='.') || (s[i-1][j+1]!='.'&&s[i+1][j+1]!='.')
|| (s[i-1][j-1]!='.'&&s[i-1][j+1]!='.') || (s[i+1][j-1]!='.'&&s[i+1][j+1]!='.')){
}else if((s[i-1][j]!='.'&&s[i-1][j+1]!='.'&&s[i][j+1]=='.')||(s[i+1][j]!='.'&&s[i+1][j+1]!='.'&&s[i][j+1]=='.')){
d = 1;
}else if((s[i][j-1]!='.'&&s[i-1][j-1]!='.'&&s[i-1][j]=='.')||(s[i][j+1]!='.'&&s[i-1][j+1]!='.'&&s[i-1][j]=='.')){
d = 2;
}else if((s[i+1][j-1]!='.'&&s[i+1][j]!='.'&&s[i][j-1]=='.')||(s[i-1][j-1]!='.'&&s[i-1][j]!='.'&&s[i][j-1]=='.')){
d = 3;
}else if((s[i+1][j+1]!='.'&&s[i][j+1]!='.'&&s[i+1][j]=='.')||(s[i][j-1]!='.'&&s[i+1][j-1]!='.'&&s[i+1][j]=='.')){
d = 4;
}
if(d==1){
if(s[i-1][j+1]!='.'){
while(s[i-1][j+1]!='.'){
s[i][++j] = ' ';
}
}
}else if(d==2){
if(s[i-1][j-1]!='.'){
while(s[i-1][j-1]!='.'){
s[--i][j] = ' ';
}
}
}else if(d==3){
if(s[i+1][j-1]!='.'){
while(s[i+1][j-1]!='.'){
s[i][--j] = ' ';
}
}
}else if(d==4){
if(s[i+1][j+1]!='.'){
while(s[i+1][j+1]!='.'){
s[++i][j] = ' ';
}
}
}
// for(int i=30;i<=40;i++){
// for(int j=30;j<=40;j++)
// printf("%c",s[i][j]);
// printf("\n");
// }
// for(int i=31;i<=40;i++){
// for(int j=32;j<=40;j++)
// printf("%c",s[i][j]);
// printf("\n");
// }
for(int i=1;i<=80;i++){
bool f = 0;
for(int j=1;j<=80;j++){
if(s[i][j]!='.'){
printf("%c",s[i][j]);
f = 1;
}
}
if(f) printf("\n");
}
printf("\n");
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
solve();
}
return 0;
}
// fjksdklsfasnkfsbfjdifsknsdfsdlg
- 相对分子质量
这道不知道哪里出问题了.感觉思路很清晰,写的很简洁了.
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <stack>
using namespace std;
typedef long long ll;
map<string,ll> mp;
stack<ll> st;
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
string s;
for(ll i=1;i<=n;i++){
cin >> s;
ll x;
scanf("%lld",&x);
mp[s] = x;
// cout << s << " " << mp[s] << endl;
}
for(ll j=1;j<=m;j++){
string ss;
cin >> ss;
ll len = ss.size();
s = "";
for(ll i=0;i<len;i++){
if(ss[i]=='('){
st.push(-1);
}else if(ss[i]==')'){
ll sum = 0;
while(st.top()!=-1){
sum += st.top();
st.pop();
}
st.pop();
st.push(sum);
}else if((ss[i]>='a'&&ss[i]<='z') || (ss[i]>='A'&&ss[i]<='Z')){
s = s+ss[i];
// cout << "s=" << s << endl;
if(mp[s]){
// cout << "mp[s]=" << mp[s] << endl;
st.push(mp[s]);
s = "";
}
}else if(ss[i]>='0'&&ss[i]<='9'){
string sss = "";
while(ss[i]>='0'&&ss[i]<='9'){
sss += ss[i];
i++;
}
// cout << "sss=" << sss << endl;
ll cnt = 0;
ll mid = 1;
for(ll k=sss.size()-1;k>=0;k--){
cnt += mid*(sss[k]-'0');
mid *= 10;
}
// cout << "cnt=" << cnt << endl;
ll sum = st.top();
st.pop();
sum *= (cnt);
// cout << "sum=" << sum << endl;
st.push(sum);
i--;
}
}
ll ans = 0;
while(!st.empty()){
if(st.top()==-1){
st.pop();
continue;
}
ans += st.top();
st.pop();
}
printf("%lld\n",ans);
}
return 0;
}
/*
4 1
Ba 66
O 16
H 1
C 12
Ba((OH)2(CO3)2)3
debug:(OH)10
*/
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 210;
int t, n, m;
bool g[N][N];
int gcd(int a, int b){
return b ? gcd(b, a % b) : a;
}
int in[N];
int a[N];
int main()
{
cin >> t;
a[1] = 1; a[0] = 1;
for (int i = 2; i <= 200; i++){
a[i] = a[i - 1] * i;
}
while (t--)
{
memset(g, false, sizeof g);
memset(in, 0, sizeof in);
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
g[x][y] = true;
g[y][x] = true;
in[x]++;
in[y]++;
}
int p = 0, q = 0;
for (int i = 1; i <= n; i++)
for (int j = i+1; j <= n; j++){
for (int k = j+1; k <= n; k++){
if (g[j][i] && g[i][k]){
q++;
if (g[j][k]) p++;
}
}
}
int ans = 0;
// cout << p*3 << ' ' << q << endl;
// 统计入度数.
for (int i = 1; i <= n; i++){
ans += (in[i] * (in[i] - 1)) / 2;
}
if (!p) puts("0/1");
else
{
p = p*3, q;
int q = gcd(p, ans);
printf("%d/%d\n", p/q , ans/q);
}
}
return 0;
}
PS:模拟能力有待提升.要注重细节处理,全盘考虑想清楚.