1.Win(QAQ)
作为少数的提交第一题超过两次的ACMer,我有必要提醒:要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题,要看完题!
#include<bits/stdc++.h>
using namespace std;
int main(){
string str;
cin>>str;
if(str=="NEU")cout<<"Win"<<endl;
else if(str=="THU")cout<<"Lose"<<endl;
else cout<<"?";
return 0;
}
2.比大小
思路: 一个一个地比较,运用字符串来存储数据,按位读取。
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
string str1,str2;
cin>>str1>>str2;
if(str1==str2){
cout<<"="<<endl;
continue;
}
int lena=str1.length();
int lenb=str2.length();
int js=0;
while(str1[js]==str2[js] && js<=lena-1 && js<=lenb-1)js++;
if(js>lena-1)cout<<"<"<<endl;
else if(js>lenb-1)cout<<">"<<endl;
else cout<<(str1[js]>str2[js]?">":"<")<<endl;
}
return 0;
}
3. 矩阵乘法
思路:见题目:
#include<bits/stdc++.h>
using namespace std;
int a[1001][1001],b[1001][1001],N,M,P;
int main(){
cin>>N>>M>>P;
for(int i=1;i<=N;i++)for(int j=1;j<=M;j++)cin>>a[i][j];
for(int i=1;i<=M;i++)for(int j=1;j<=P;j++)cin>>b[i][j];
for(int i=1;i<=N;i++){
for(int j=1;j<=P;j++){
int ans=0;
for(int k=1;k<=M;k++){
ans+=a[i][k]*b[k][j];
}
cout<<ans<<" ";
}
cout<<endl;
}
return 0;
}
4.疯狂星期四(看到此篇博客的人v我50!!!)
思路:一个简单的小模拟,从日月年从小到大开始模拟,从小到大调用数据以免发生错误,并且需要提醒:要想清楚加的数是属于哪个年份/月份的。。。
#include<bits/stdc++.h>
using namespace std;
int cnt=2,M,D,Y;
bool pd(int n){
if(n%4!=0)return 0;
else{
if(n%400==0)return 1;
else{
if(n%100==0)return 0;
else return 1;
}
}
}
int ri[12]={31,0,31,30,31,30,31,31,30,31,30,31};
int main(){
cin>>M>>D>>Y;
//将日期调为11号
cnt+=D-11;
//将月份调到10月
if(M>10){
while(M!=10){
M--;
cnt+=ri[M-1];
}
}
else if(M<10){
while(M!=10){
cnt-=(M==2?(pd(Y)?29:28):ri[M-1]);
M++;
}
}
else ;
//将年份跳到当前年
if(Y>2022){
while(Y!=2022){
cnt+=(pd(Y)?366:365);
Y--;
}
}
else if(Y<2022){
while(Y!=2022){
Y++;
cnt-=(pd(Y)?366:365);
}
}
else ;
while(cnt<0)cnt+=7;
cnt%=7;
cout<<cnt<<endl;
return 0;
}
5.排列.
思路:贪心。
先从左到右,找到能包含第一个maxx的截至位置,再从终止点开始,操作。。。
#include<bits/stdc++.h>
using namespace std;
int n,k,p[1000010],cnt=1,ans=0,maxx=-1e9;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>p[i],maxx=max(maxx,p[i]);
bool flag=1;
while(flag){
if(p[cnt]=maxx)flag=0;
for(int i=1;i<=k-1;i++){
cnt++;
if(p[cnt]=maxx)flag=0;
}
ans++;
}
while(cnt<n){
bool flag=0;
for(int i=1;i<=k;i++){
if(p[cnt+i]==maxx){
flag=1;
break;
}
}
if(flag)cnt=cnt+k;
else cnt=cnt+k-1;
ans++;
}
cout<<ans;
return 0;
}
6.小步点。
一道dfs的题。
#include<bits/stdc++.h>
using namespace std;
struct EVA{
double x,y;
}mapp[6];
double dis[6][6],minn=1e9;
bool book[6];
void dfs(int id,int temp,double DIS){
if(temp==5){
minn=min(minn,DIS);
return ;
}
book[id]=1;
for(int i=1;i<=5;i++){
if(book[i]==0)dfs(i,temp+1,DIS+dis[i][id]);
}
book[id]=0;
}
int main(){
for(int i=1;i<=5;i++){
cin>>mapp[i].x>>mapp[i].y;
for(int j=1;j<=5;j++){
dis[i][j]=dis[j][i]=sqrt(pow(mapp[i].x-mapp[j].x,2)+pow(mapp[i].y-mapp[j].y,2));
}
}
for(int i=1;i<=5;i++)dfs(i,1,0);
cout<<fixed<<setprecision(3)<<minn;
return 0;
}
7.OP生日会。。
(唯一一道不怎么水的题。。为啥我不说)
有a个空(男旅行者)和b个荧(女旅行者)在会场外排队参加原神生日会。不幸的是,会场里只有N个座位,而且已经有若干个派蒙(可以是0个)已经坐在会场里面了。
- 每个男旅行者都希望坐在他边上的是女旅行者或者派蒙。
- 每个女旅行者都希望坐在她边上的是男旅行者或者派蒙。
换句话说,男旅行者不希望和其他男旅行者坐一起,女旅行者不希望和其他女旅行者坐一起。
如果会场内没有符合旅行者心意的位置,那么旅行者会选择不参加原神生日会。
思路:
看最多能排入多少个履行者
派蒙的中间分为两种情况。
第一种:座位为偶数。能排入n/2位空,n/2位荧。(对空荧来说都是最佳方案,都不能排入更多)
第二种:座位为奇数。能排入(n-1)/2位空,(n-1)/2位荧,还有一个自由座位,可以坐空或荧