A 小红的葫芦
题目大意:给一个5个元素的数组,如果有两个相同的元素,同时另外三个元素也相同,但是这五个元素不能一样,符合输出“YES”,反之输出“NO”
分析:遍历一下就好了
代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
int a[110];
int main (){
for (int i=0;i<5;i++){
int x;
cin >> x;
a[x]++;
}
bool st1=false,st2=false,st3=true;
for (int i=0;i<110;i++){
if (a[i]==3) st1=true;
if (a[i]==2) st2=true;
if (a[i]==5) st3=false;
}
if (st1 && st2 && st3) cout << "YES";
else cout << "NO";
return 0;
}
B 茉茉的密码
题目大意:给n个字符串,然后任意输出一个公共子串
分析:单个字母也是公共子串
代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=1e5+10;
int a[N][30];
void solve(){
int n;
cin >> n;
for (int i=0;i<n;i++){
string str;
cin >> str;
int len=str.length();
for (int j=0;j<len;j++){
a[i][str[j]-'a']++;
}
}
for (int i=0;i<30;i++){
bool st=true;
for (int j=0;j<n;j++){
if (a[j][i]==0){
st=false;
}
}
if (st){
char x=i+'a';
cout << x <<endl;
return;
}
}
}
int main (){
solve();
return 0;
}
C 苗苗的气球
题目大意:有n种个不同颜色气球,每种ai个,两个不同颜色气球接触后就会一起爆炸,最后气球没了或者只剩下了一个颜色的气球,求其可能性。
分析:三种情况,当气球总和小于2倍的气球最大数量,最后肯定剩这一种,当气球总和等于2倍的气球最大数量时,最后没有剩,然后当气球总和大于2倍气球最大数量时,遍历每个气球,如果总和减去这个气球数,剩下的时偶数,则 撞完了,如果为奇数,只需要当前遍历气球数量大于1就好了
代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=1e5+10;
int a[N];
int main (){
int n;
cin >> n;
int sum=0,Max=0;
for (int i=0;i<n;i++){
cin >> a[i];
sum+=a[i];
Max=max(Max,a[i]);
}
if (sum<2*Max){
cout << 1 << endl;
}
else if (sum==2*Max){
cout << 0 << endl;
}
else{
int cnt=0;
for (int i=0;i<n;i++){
int tmp=sum;
tmp-=a[i];
if (tmp%2==0){
cnt++;
}
else{
if (a[i]>1){
cnt++;
}
}
}
cout << cnt << endl;
}
return 0;
}
D 萌萌的好数
题目大意:满足两项其中之一便不是好数 1.该数对3取模不为 0,2.该数的最后一位数字不为 3
请你告诉他第n个好数是什么。
分析:找规律,会发现,每10个数字中6个好数,然后你从第几个好数反推一下就可以了
代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=1e5+10;
void solve(){
ll n;
cin >> n;
ll cnt=(n-1)/6*10;
ll q=(n-1)%6;
for (ll i=cnt;i<=cnt+10;i++){
if (i % 3!=0 && i%10!=3){
if (q==0){
cout << i << endl;
return;
}
q--;
}
}
}
int main (){
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}
E 茜茜的计算器
题目大意:一个计算器可以显示 1-9,然后求n位组成的轴对称图形的种类,如n=2,就有
00,01,03,08,
10,11,13,18,
25,
30,31,33,38,
52,
80,81,83,88。
这里的轴对称,不管x,还是y轴都可以
分析:x轴对称:0,1,3,8;y轴对称:0,1,2,5,8,右边固定;x,y轴对称:0,8;
只要x轴对称的个数+y轴对称的个数-x,y轴对称的个数就好了
代码:
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const ll p=1e9+7;
ll qmi(ll a,ll b){
ll res=1%p;
while(b){
if (b&1) res=res*a%p;
a=a*a%p;
b>>=1;
}
return res;
}
int main (){
ll n;
cin >> n;
ll ans1=qmi(4,n)%p;
ll ans2=qmi(4,n/2)%p;
ll ans3=qmi(2,n/2)%p;
if (n%2==1){
ans2=ans2*2%p;
ans3=ans3*2%p;
}
cout << (ans1+ans2-ans3+p)%p;
return 0;
}
总结:本身难度不高,就是c上细节比较多,Fdebug半天没出来,好痛苦。