SDUT 2022 summer team contest 2nd(for 21)

1234567890

 

 一排或者两摞 

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;



int main()
{
	freopen("alex.in", "r", stdin);
    freopen("alex.out", "w", stdout);
	double n,m;
	cin>>n>>m;
	if(n<m)
	swap(n,m);
	if(n/m>=3)
	printf("%.3lf\n",m);
	else 
	printf("%.3lf\n",max(n/3,m/2));
	return 0;
}

 四连通,脑子随便扯个图,相等就一排一排输出就行,然后多的包着少的

#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
//
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//#define INF 0x3f3f3f
#define ll long long
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define unmap(a,b) unordered_map<a,b>
#define unset(a) unordered_set<a>
#define F first
#define S second
#define pb push_back
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define _rep(i, a, b) for (int i = (a); i >= (b); --i)
#define mode 1e4+7
#define pi acos(-1)
#define U_queue priority_queue<PII,vector<PII>,greater<PII> >
typedef double db;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef vector<int> vi;
const int N = 110;
signed main(){
     freopen("black.in", "r", stdin);
     freopen("black.out", "w", stdout);
     int n,m;
     cin>>n>>m;
     char black='@',white='.';
     if(n>m){
          swap(m,n);
          swap(black,white);
     }
     cout<<2*m<<' '<<3<<endl;
     for(int i=0;i<(m-n);i++){
          cout<<black<<black<<black<<endl<<black<<white<<black<<endl;
     }
     for(int i=0;i<n;i++){
          cout<<black<<black<<black<<endl<<white<<white<<white<<endl;
     }
}
//made by happywhale 20220728000

思维,一开始还以为写什么kmp,想多了,取前缀猴后缀组成一个单词,那么重复的字母是一一对应的,所以直接计算在一串里出现二串中字母的个数并且在字符串长度乘积的基础上减掉就行了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;


int main()
{
     freopen("concatenation.in", "r", stdin);
     freopen("concatenation.out", "w", stdout);
     string n,m;
	cin>>n>>m;
	map<char,ll> num;
	ll a=n.size();
	ll b=m.size();
	//memset(num,0,sizeof num);
	ll res=a*b;
	for(ll i=1;i<a;i++) num[n[i]]++;
	for(ll i=0;i<b-1;i++){
		res-=num[m[i]];
	}
	cout<<res<<endl;
	return 0;
}//al;skgn

 

 模拟,不过没考虑好就写了,拖了很久,遇到-就添加好就行了,注意出现0的时候的处理

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;

int main()
{
	freopen("easy.in", "r", stdin);
	freopen("easy.out", "w", stdout);
	string a;
	cin >> a;
	for (int i = 0; i < a.size(); i++)
	{
		if (a[i] == '-')
		{
			cout << "-" << a[++i];
			i++;
			if (a[i] == '-' || a[i] == '+')
			{
				i--;
				continue;
			}
			if (i == a.size())
				break;
			int flag = i;
			while (i < a.size() && a[i] == '0')
			{
				i++;
			}
			for (int j = flag; j < i; j++)
				cout << "+"
					 << "0";

			if (i == a.size())
				break;
			if (a[i] == '-' || a[i] == '+')
				i--;
			else
				cout << "+" << a[i];
		}
		else
			cout << a[i];
	}
	return 0;
}

 

队友写的 转化为31进制啥的 不是很懂 我自己的想法还没出代码, 

后面补上

#include <bits/stdc++.h>
using namespace std;

const int N=1e3+10;
char str[N];

int  main()
{
     freopen("hash.in", "r", stdin);
     freopen("hash.out", "w", stdout);
    int k;
    cin>>k;
    for(int i=0;i<1000;i++) str[i]='S';
    cout<<str<<endl;
    for(int i=0;i<k-1;i++)
    {
        str[i]-=1;str[i+1]+=31;
        cout<<str<<endl;
        str[i]+=1,str[i+1]-=31;
    }
    return 0;
}

 

简单模拟, 

#include <bits/stdc++.h>
using namespace std;

const int N = 110;
int n,m;
int a[N][N];

int bei(int x,int y)
{
     int flag=0;
     for(int i=1;i<x;i++)
     {
          if(a[i][y]>=a[x][y])
          {
               flag=1;
               break;
          }
     }
     if(flag==0)    return 1;
     return 0;
}

int nan(int x,int y)
{
     int flag=0;
     for(int i=x+1;i<=n;i++)
     {
          if(a[i][y]>=a[x][y])
          {
               flag=1;
               break;
          }
     }
     if(flag==0)    return 1;
     return 0;
}

int dong(int x,int y)
{
     int flag=0;
     for(int j=y+1;j<=m;j++)
     {
          if(a[x][j]>=a[x][y])
          {
               flag=1;
               break;
          }
     }
     if(flag==0)    return 1;
     return 0;
}

int xi(int x,int y)
{
     int flag=0;
     for(int j=1;j<y;j++)
     {
          if(a[x][j]>=a[x][y])
          {
               flag=1;
               break;
          }
     }
     if(flag==0)    return 1;
     return 0;
}

int main()
{
     freopen("lucky.in", "r", stdin);
     freopen("lucky.out", "w", stdout);
     ios::sync_with_stdio(false);
     cin.tie(0);
     cout.tie(0);
     cin>>n>>m;
     for(int i=1;i<=n;i++)
     {
          for(int j=1;j<=m;j++)
          {
               cin>>a[i][j];
          }
     }
     int res=0;
     res=(m+n)*2;
     //cout<<res<<endl;
     for(int i=1;i<=n;i++)
     {
          for(int j=1;j<=m;j++)
          {
               if(i!=1)
               {
                    res+=bei(i,j);
               }
               if(i!=n)
               {
                    res+=nan(i,j);
               }
               if(j!=1)
               {
                    res+=xi(i,j);
               }
               if(j!=m)
               {
                    res+=dong(i,j);
               }
          }
     }
     cout<<res<<endl;
     return 0;
}//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值