| 题目 | 难度 | 知识点 |
|---|---|---|
| A 星图 | ★★ | 模拟 |
| B 好数 | ★ | 签到 |
| C 装进肚子 | ★★ | 贪心 |
| D ZZZZone爱吃糖 | ★ | 模拟 |
| E 开心的涂刷 | ★ | 组合数 |
| F 兼职数靶 | ★ | 模拟 |
| G 卡牌游戏 | ★ | 模拟 |
| H Hungry! | ★ | 模拟 |
| I 快饿死的XzzF | ★★ | dfs |
| J 小猪佩奇练打字 | ★★ | 模拟 |
| k 免费WiFi | ★ | 差分 |
打的比较爽的一场。这种简单场太能提升自信心了。
星图
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
char a[N][N];
int n,m,q;
void solve(int x,int y,char op)
{
int flag=0;
if(op=='U')
{
int stx=x,sty=y;
while(stx>=1&&a[stx][sty]=='*') stx--;
if(!stx) flag=1;
}else if(op=='L')
{
int stx=x,sty=y;
while(sty>=1&&a[stx][sty]=='*') sty--;
if(!sty) flag=1;
}else if(op=='R')
{
int stx=x,sty=y;
while(sty<=m&&a[stx][sty]=='*') sty++;
if(sty>m) flag=1;
}else if(op=='D')
{
int stx=x,sty=y;
while(stx<=n&&a[stx][sty]=='*') stx++;
if(stx>n) flag=1;
}
if(flag) puts("YES");
else puts("NO");
}
int main(void)
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
while(q--)
{
int x,y;
char op; scanf("%d %d %c",&x,&y,&op);
solve(x,y,op);
}
return 0;
}
好数
#include<bits/stdc++.h>
using namespace std;
int st[15];
string a;
int main(void)
{
cin>>a;
for(int i=0;i<a.size();i++) st[a[i]-'0']=1;
int cnt=0;
for(int i=0;i<10;i++) cnt+=st[i];
if(cnt>=2) puts("NO");
else puts("YES");
return 0;
}
装进肚子
我的做法就是将白天大于黑的用一个存,黑的大于白的用一个存,而后判断看一下,而后就是根据差值排序。
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL n,x,y,k,ans;
const int N=1e6+10;
struct node
{
LL x,y,z;
}Node[N];
bool cmp(node a,node b){return a.z>b.z;}
vector<node>ve1,ve2;
int main(void)
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>Node[i].x;
}
for(int i=0;i<n;i++)
{
cin>>Node[i].y;
}
for(int i=0;i<n;i++)
{
if(Node[i].x>=Node[i].y)
{
Node[i].z=Node[i].x-Node[i].y;
ve1.push_back(Node[i]);
}else
{
Node[i].z=Node[i].y-Node[i].x;
ve2.push_back(Node[i]);
}
}
sort(ve1.begin(),ve1.end(),cmp);
sort(ve2.begin(),ve2.end(),cmp);
LL ans=0;
if(ve1.size()>=k)
{
for(int i=0;i<k;i++) ans+=ve1[i].x;
for(int i=k;i<ve1.size();i++) ans+=ve1[i].y;
for(int i=0;i<ve2.size();i++) ans+=ve2[i].y;
}else
{
for(int i=0;i<ve1.size();i++) ans+=ve1[i].x;
int t=k-ve1.size();
for(int i=ve2.size()-1,j=1;j<=t;i--,j++) ans+=ve2[i].x;
for(int i=ve2.size()-1-t;i>=0;i--) ans+=ve2[i].y;
}
cout<<ans;
return 0;
}
好的想法 利用结构体分别存储早上和晚上的甜蜜值 先假设晚上把巧克力全部吃完, 然后将早上甜蜜值减去晚上甜蜜值,从大到小排序,看哪个差值更大,说明早上吃更划算 最后根据排序替换掉前k个本应该在早上吃的。
ZZZZone爱吃糖
总的方案-不能的方案。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long int LL;
LL a[N],s[N],n,m,ans=0;
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
cin>>m;
while(m--)
{
int l,r; cin>>l>>r;
ans+=max(0ll,s[r]-s[l-1]);
}
cout<<ans;
return 0;
}
开心的涂刷
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const long long int mod=1000000007;
LL n,m;
LL qsm(LL a,LL b,LL p)
{
LL sum=1;
a=a%p;
while(b)
{
if(b&1) sum=(sum*a)%p;
b>>=1;
a=(a*a)%p;
}
return sum%p;
}
void solve()
{
LL temp1=qsm(m,n,mod);
LL temp2=(m%mod) *qsm(m-1,n-1,mod)%mod;
cout<<(temp1-temp2+mod)%mod;
}
int main(void)
{
cin>>n>>m;
solve();
return 0;
}
兼职数靶
#include<bits/stdc++.h>
using namespace std;
int arr[13][13] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1},
{1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
char a[15][15];
int main(void)
{
int n;
while(cin>>n)
{
if(n==0) break;
double cnt=0;
for(int i=0;i<13;i++)
{
for(int j=0;j<13;j++)
{
cin>>a[i][j];
if(a[i][j]=='#') cnt+=arr[i][j];
}
}
printf("%.2lf\n",cnt/n);
}
return 0;
}
卡牌游戏
#include<bits/stdc++.h>
using namespace std;
int cnt1,cnt2;
bool check(string a,string b)
{
if(a=="Jin"&&b=="Mu") return 1;
if(a=="Mu"&&b=="Tu") return 1;
if(a=="Tu"&&b=="Shui") return 1;
if(a=="Shui"&&b=="Huo") return 1;
if(a=="Huo"&&b=="Jin") return 1;
return 0;
}
int main(void)
{
int n; cin>>n;
while(n--)
{
string a,b; cin>>a>>b;
if(check(a,b))cnt1++;
else if(check(b,a)) cnt2++;
}
if(cnt1>cnt2) puts("Alice");
else if(cnt1<cnt2) puts("Bob");
else puts("Draw");
return 0;
}
Hungry!
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n; cin>>n;
while(n--)
{
string a="gu...";
for(int i=0;i<n;i++) cout<<a;
cout<<'\n';
puts("The story is so boring. And I am so hungry!");
}
return 0;
}
快饿死的XzzF
#include<bits/stdc++.h>
using namespace std;
int ans,n;
void dfs(int index,int fa)
{
if(index==n)
{
ans++;
return;
}
for(int i=0;i<2;i++)
{
if(i==0&&fa==0) continue;
dfs(index+1,i);
}
}
int main(void)
{
cin>>n;
dfs(0,-1);
cout<<ans;
return 0;
}
小猪佩奇练打字
#include<bits/stdc++.h>
using namespace std;
string s;
int m;
int main(void)
{
while(cin>>s>>m)
{
string a="abcdefghijklmnopqrstuvwxyz";
while(m--)
{
char l,r; cin>>l>>r;
swap(a[l-'a'],a[r-'a']);
}
for(int i=0;i<s.size();i++)
{
cout<<a[s[i]-'a'];
}
puts("");
}
return 0;
}
免费WiFi
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int s[N],n,m;
int main(void)
{
cin>>n>>m;
while(n--)
{
int l,r; cin>>l>>r;
s[l]++,s[r+1]--;
}
int temp=0;
for(int i=1;i<=1e5;i++) s[i]+=s[i-1],temp=max(temp,s[i]);
int ans=temp/m;
if(temp%m) ans++;
cout<<ans;
return 0;
}