2021.1.14寒假打卡Day11

C - 1-SAT

Problem Statement
Given are N strings S1,S2,…,SN. Each of these is a non-empty string consisting of lowercase English letters, with zero or one ! added at the beginning.

We say a string T to be unsatisfied when it matches one of S1,S2,…,SN regardless of whether we add an ! at the beginning of T.

Determine whether there exists an unsatisfied string. If so, present one such string.

Constraints
1 ≤ N ≤ 2×105
1 ≤ |Si| ≤ 10
Si is a non-empty string consisting of lowercase English letters, with zero or one ! added at the beginning.

Input
Input is given from Standard Input in the following format:
N
S1

SN

Output
If there exists an unsatisfied string, print one such string.
If there is no unsatisfied string, print satisfiable.

Sample Input 1

6
a
!a
b
!c
d
!d

Sample Output 1

a

a matches S1 as is, and it matches S2 when we add an !, so it is unsatisfied. Besides that, d will also be accepted.

Sample Input 2

10
red
red
red
!orange
yellow
!blue
cyan
!green
brown
!gray

Sample Output 2

satisfiable

学习新东西——哈希表 (附本题题解

用30进制计算字母字符串的哈希值,利用哈希表查询是否有不满足的值

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

string s[200005];

int main() {
    int n;
    cin>>n;
    for (int i=1; i<=n; i++) {
        cin>>s[i];
    }
	map<long long, int> mp;
    //处理正常的字符串
    for (int i=1; i<=n; i++) {
        if ('!'==s[i][0]) continue;
        long long x=0;
        for (int j=0; j<(int)s[i].length(); j++)
            x = x*30+(s[i][j]-'a');
        mp[x]=i;
    }
    //处理'!'开头的字符串
    for (int i=1; i<=n; i++) {
        if ('!'!=s[i][0]) continue;
        long long x=0;
        for (int j=1; j<(int)s[i].length(); j++) 
            x = x*30+(s[i][j]-'a');
        if (mp.count(x)) {
            cout<<s[mp[x]]<<"\n";
            return 0;
        }
    }
    cout<<"satisfiable\n";
    return 0;
}

哈希果然还是没看懂

D - Brick

We have a truck, which can carry at most N kilograms.

We will load bricks onto this truck, each of which weighs W kilograms. At most how many bricks can be loaded?

Constraints
1 ≤ N,W ≤ 1000
N and W are integers.

Input
Input is given from Standard Input in the following format:
N W

Output
Print an integer representing the maximum number of bricks that can be loaded onto the truck.

Sample Input 1

10 3

Sample Output 1

3

Each brick weighs 3 kilograms, so 3 bricks weigh 9 kilograms, and 4 weigh 12 kilograms.
Thus, we can load at most 3 bricks onto the truck that can carry at most 10 kilograms.

Sample Input 2

1000 1

Sample Output 2

1000

整除即可,略

E - Blocks on Grid

We have a grid with H horizontal rows and W vertical columns. The square at the i-th row from the top and j-th column from the left has Ai,j blocks stacked on it.

At least how many blocks must be removed to make all squares have the same number of blocks?

Constraints
1≤H,W≤100
0≤Ai,j≤100

Input
Input is given from Standard Input in the following format:
H W
A1,1 A1,2 … A1,W

AH,1 AH,2 … AH,W

Output
Print the minimum number of blocks that must be removed.

Sample Input 1

2 3
2 2 3
3 2 2

Sample Output 1

2

Removing 1 block from the top-right square and 1 from the bottom-left square makes all squares have 2 blocks.

Sample Input 2

3 3
99 99 99
99 0 99
99 99 99

Sample Output 2

792

Sample Input 3

3 2
4 4
4 4
4 4

Sample Output 3

0
#include<iostream>
using namespace std;

int main(){
	int a[105][105];
	int h,w,min=100,ans=0;
	cin>>h>>w;
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++){
			cin>>a[i][j];
			min=min<a[i][j]?min:a[i][j];
	}
	for(int i=0;i<h;i++)
		for(int j=0;j<w;j++){
			ans+=a[i][j]-min;
	}
	cout<<ans;
	return 0;
} 

F - Unlucky 7

Problem Statement
Takahashi hates the number 7.

We are interested in integers without the digit 7 in both decimal and octal. How many such integers are there between 1 and N (inclusive)?

Constraints
1≤N≤105
N is an integer.

Input
Input is given from Standard Input in the following format:
N

Output
Print an integer representing the answer.

Sample Input 1

20

Sample Output 1

17

Among the integers between 1 and 20, 7 and 17 contain the digit 7 in decimal. Additionally, 7 and 15 contain the digit 7 in octal.
Thus, the 17 integers other than 7, 15, and 17 meet the requirement.

Sample Input 2

100000

Sample Output 2

30555

统计十进制n以内(包括n)十进制和八进制不带7的数

#include<iostream>
using namespace std;

int iswith7(int x){
	int d=x,o=x;
	while(d!=0){
		if(d%10==7) return 1;
		d/=10;
	}
	while(o!=0){
		if(o%8==7) return 1;
		o/=8;
	}
	return 0;
}

int main(){
	int n,ans=0;
	cin>>n;
	ans=n;
	for(int i=1;i<=n;i++)
		if(iswith7) --ans;
	cout<<ans;
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值