本文主要是介绍Codeforces Round 237 ABCD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
A..有啥好说的的。。
#include <stdio.h>
#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <set>
#include <stack>
using namespace std;#define READ freopen("acm.in","r",stdin)
#define WRITE freopen("acm.out","w",stdout)
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define MII map<int,int>::iterator
#define fst first
#define sec second
#define MS(x,d) memset(x,d,sizeof(x))
#define INF 0x3f3f3f3f
#define ALL(x) x.begin(),x.end()
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ROOT 0,n-1,1
#define PB push_back
#define FOR(a,b,c) for(int a=b;a<c;a++)
#define MOD 1000000007
#define keyTree (ch[ ch[root][1] ][0])
#define MAX 200000int n;
char b[500][500];
bool solve()
{char x=b[0][0];char nx=b[0][1];if(x==nx)return false;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(j==i||j==n-1-i){if(b[i][j]!=x)return false;}else{if(b[i][j]!=nx)return false;}}}return true;
}
int main()
{cin>>n;for(int i=0;i<n;i++)scanf("%s",b[i]);if(solve())cout<<"YES"<<endl;elsecout<<"NO"<<endl;return 0;
}
B,考的啥啊这是。。
我最讨厌的——模拟。。浮点数。。
算好下一步要走多少,下一步的目的地,一下下减就可以了
这种4个方向转的,用 dir 模拟好 当成1个方向搞就可以了
#include <stdio.h>
#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <set>
#include <stack>
using namespace std;#define READ freopen("acm.in","r",stdin)
#define WRITE freopen("acm.out","w",stdout)
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define MII map<int,int>::iterator
#define fst first
#define sec second
#define MS(x,d) memset(x,d,sizeof(x))
#define INF 0x3f3f3f3f
#define ALL(x) x.begin(),x.end()
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ROOT 0,n-1,1
#define PB push_back
#define FOR(a,b,c) for(int a=b;a<c;a++)
#define MOD 10007
#define keyTree (ch[ ch[root][1] ][0])
#define MAX 200
#define SIG 128int dir[4][2]={1,0,0,1,-1,0,0,-1};double tar[4][2]={1,0,1,1,0,1,0,0};
double a,d;int main()
{double x,y;x=y=0;cin>>a>>d;while(d>a*4)d-=a*4;int n;cin>>n;int di=0;for(int i=0;i<n;i++){double t=d;{while(t>1e-9){double next=fabs(tar[di][0]*a-x)+fabs(tar[di][1]*a-y);double p=min(next,t);x+=p*dir[di][0];y+=p*dir[di][1];if(t>next)di=(di+1)%4;t-=p;}}printf("%lf %lf\n",x,y);}return 0;
}
C题。。
最短路。。
就是把图分层嘛,
第一层只有1个0,第二层全是1,第三层就是2了。
注意可能 wa 的地方 第一个是0只能有一个。。当然 样例给了。。
第二个地方是 最短路必须是连续的 。。
然后你就从上一层的点往下面连边就是了。。
如果出现上一层都满了,下一层还没满,那也是不行的。
#include <stdio.h>
#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <set>
#include <stack>
using namespace std;#define READ freopen("acm.in","r",stdin)
#define WRITE freopen("acm.out","w",stdout)
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define MII map<int,int>::iterator
#define fst first
#define sec second
#define MS(x,d) memset(x,d,sizeof(x))
#define INF 0x3f3f3f3f
#define ALL(x) x.begin(),x.end()
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ROOT 0,n-1,1
#define PB push_back
#define FOR(a,b,c) for(int a=b;a<c;a++)
#define MOD 10007
#define keyTree (ch[ ch[root][1] ][0])
#define MAX 200
#define SIG 128vector<int> dis[111111];
int du[111111];
vector<PII> ans;
int maxlen;
int n,k;
bool solve()
{if(dis[0].size()!=1)return false;for(int i=1;i<=maxlen;i++){if(dis[i].size()==0)return false;int before=0;for(int j=0;j<dis[i].size();j++){int be=dis[i-1][before];int cur=dis[i][j];if(du[be]>=k){before++;if(before>=dis[i-1].size())return false;be=dis[i-1][before];}du[be]++;du[cur]++;ans.PB(PII(be,cur));}}return true;
}
int main()
{cin>>n>>k;maxlen=-1;//Notice 1 0for(int i=1;i<=n;i++){int t;scanf("%d",&t);maxlen=max(maxlen,t);dis[t].PB(i);}if(solve()){printf("%d\n",ans.size());for(int i=0;i<ans.size();i++)printf("%d %d\n",ans[i].fst,ans[i].sec);}elsecout<<-1<<endl;return 0;
}
注意转移方程,不要错啊
dp[i][j] 代表到第 i 步 这里状态是什么。
注意一下 1 其他状态前面状态都确定 唯有1,前面有 * 和 没* 对后面是有影响的。
所以 用两个状态表示1 一个表示前面没* 一个表示前面有*
还有初始和结束情况必须都合法才行。
初始格子不能有 前有有雷的1和2
最后格子不能有 2 和前面没雷的 1
#include <stdio.h>
#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <set>
#include <stack>
using namespace std;#define READ freopen("acm.in","r",stdin)
#define WRITE freopen("acm.out","w",stdout)
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define MII map<int,int>::iterator
#define fst first
#define sec second
#define MS(x,d) memset(x,d,sizeof(x))
#define INF 0x3f3f3f3f
#define ALL(x) x.begin(),x.end()
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ROOT 0,n-1,1
#define PB push_back
#define FOR(a,b,c) for(int a=b;a<c;a++)
#define MOD 1000000007
#define keyTree (ch[ ch[root][1] ][0])
#define MAX 200
#define SIG 128int len;
char b[1000010];
ll dp[1000010][5];// 0 0 1 1 mei lei 2 1 you lei 3 2 4 *
bool solve()
{char c=b[1];if(b[1]=='?'){dp[1][4]=1;dp[1][0]=1;dp[1][1]=1;}else{if(c=='*')dp[1][4]=1;else if (b[1]=='0')dp[1][0]=1;else if(b[1]=='1')dp[1][1]=1;}for(int i=2;i<=len;i++){if(b[i]=='?'){dp[i][0]=(dp[i-1][0]+dp[i-1][2])%MOD;dp[i][1]=(dp[i-1][0]+dp[i-1][2])%MOD;dp[i][2]=dp[i-1][4];dp[i][3]=dp[i-1][4];dp[i][4]=(dp[i-1][3]+dp[i-1][4]+dp[i-1][1])%MOD;} if(b[i]=='1'){dp[i][1]=(dp[i-1][0]+dp[i-1][2])%MOD;dp[i][2]=dp[i-1][4];}if(b[i]=='0'){dp[i][0]=(dp[i-1][0]+dp[i-1][2])%MOD;}if(b[i]=='2'){dp[i][3]=dp[i-1][4];}if(b[i]=='*'){dp[i][4]=(dp[i-1][3]+dp[i-1][1]+dp[i-1][4])%MOD;}} return true;
}
int main()
{scanf("%s",b+1);len=strlen(b+1);solve();cout<<(dp[len][0]+dp[len][2]+dp[len][4])%MOD<<endl;return 0;
}
这篇关于Codeforces Round 237 ABCD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!